Przeczytaj
Podsumowanie
W tworzonym w tej serii e‑materiałów projekcie gry uwzględniliśmy już pewne przeszkody i wyzwania dla gracza. Jego zadaniem jest przeprowadzenie postaci przez wszystkie platformy i przejście do kolejnego poziomu. W trakcie gry może się zdarzyć, że bohater straci życie i odrodzi się na początku poziomu. Dzieje się tak, gdy spadnie z platformy lub wejdzie na przeszkodę. Aby jeszcze bardziej utrudnić rozrywkę, dodajmy do niej przeciwników. Będą oni poruszać się po platformach, a kolizja z nimi spowoduje przerwanie rozgrywki i powrót na początek poziomu.
Przeciwnicy w grze
Tworzenie przeciwników (jak i w przypadku innych obiektów) rozpoczynamy od dodania i przygotowania tekstury. Następnie opracowujemy podstawową animację (proces ten został opisany w e‑materiale Animacje i przejścia między nimi – Unity Hub, etap IIIAnimacje i przejścia między nimi – Unity Hub, etap III.
Przeciwnik ma poruszać się po platformie – dochodzić do jej końca i zawracać. Potrzebujemy rozwiązania, dzięki któremu zarejestrowany zostanie moment, w którym obiekt ma zawrócić. Aby wykryć, czy przeciwnik znajduje się na końcu platformy, dodamy do niego kolejny obiekt (dziecko) pełniący rolę detektoradetektora.
W Unity Hub można zastosować rozwiązanie, w którym jeden obiekt zawiera w sobie inne. Mówimy wtedy, że jest rodzicem, a między obiektami zachodzi relacja parent‑child (ang. rodzic‑dziecko).
Ustalamy pozycję detektora – chcemy, by znajdował się on tuż nad ziemią przed rodzicem.
Klatki przedstawiające ruch (animację) oposa:

Skrypt przeciwnika
Tworzymy nowy skrypt, w którym zaimplementujemy ruch przeciwnika. Należy w nim uwzględnić zmienne:
szybkość – aby można było ją edytować w obszarze
Inspectorokna programu Unity Hub, zmiennej nadajemy atrybutSerializedField;detektor – zmienna będzie przechowywać pozycję, rotację i skalę detektora.
Niezbędne jest stworzenie funkcji odpowiedzialnej za obrót przeciwnika. Powinna ona uruchamiać się, gdy przeciwnik dojdzie do końca platformy.
Aby obrócić teksturę postaci przeciwnika, korzystamy z wartości localScale na osi x i mnożymy ją razy -1. Kierunek ruchu przeciwnika odwracamy, mnożąc jego szybkość przez -1.
Do aktualizacji położenia przeciwnika używamy funkcji translate, która przyjmuje trzy parametry: odległości na osi x, y i z. Nie przesuwamy przeciwnika na osiach y i z. Natomiast położenie na osi x wyznaczamy, mnożąc wartość szybkości razy Time.deltaTime.
Funkcja Time.deltaTime określa czas, jaki upływa między jedną klatką gry a drugą. Powoduje ona, że przesuwamy przeciwnika tak samo szybko na wszystkich urządzeniach, niezależnie od tego, jakiej klasy jest to sprzęt. Gdybyśmy pominęli tę funkcję, to na komputerze starszej generacji przeciwnik poruszałby się bardzo wolno, a na nowszym, mocnym komputerze – bardzo szybko.
Aby sprawdzić, czy przeciwnik dotarł do końca platformy (tym samym – powinien nastąpić obrót), należy użyć funkcji RaycastHit2D, która działa podobnie do wywoływanej wcześniej funkcji BoxCast (została omówiona w e‑materiale Implementacja skoku postaci – Unity Hub, etap IIImplementacja skoku postaci – Unity Hub, etap II. Funkcja RaycastHit2D sprawdza, czy obiekt koliduje z wybraną warstwą, nie używa do tego jednak pudełka, a padającego w dół promienia. W tym celu należy zadeklarować zmienną przyjmującą następujące parametry:
pozycję początku promienia – chcemy, aby była to pozycja detektora;
kierunek – używamy tu wbudowanej funkcji Unity –
Vector2.down, która zwraca wektor skierowany w dół;długość – niewielka wartość, jednak gwarantująca sięgnięcie do platformy, powinna być ona typu
float.
Jeśli promień nie wejdzie w kolizję z platformą, to dotarliśmy do jej końca i należy uruchomić funkcję odpowiedzialną za odwrócenie obiektu przeciwnika.
Skrypt oposa:
Kolizja bohatera gry z przeciwnikiem
Chcemy, aby przeciwnik wpływał na bohatera gry – jeśli się zderzą, postać traci życie i wraca na początek poziomu. W tym celu dodajemy kolizję – możemy ułatwić sobie zadanie, korzystając z rozwiązania opisanego w e‑materiale Przerywanie rozgrywki, odradzanie postaci i awans do kolejnego poziomu – Unity Hub, etap VPrzerywanie rozgrywki, odradzanie postaci i awans do kolejnego poziomu – Unity Hub, etap V – dodajemy tagtag pułapki i komponent Box Collider 2D.
Kopie tak stworzonego przeciwnika możemy umieścić na wielu platformach, stosując prefabyprefaby omawiane w e‑materiale Prefaby i ruch kamery – Unity Hub, etap IVPrefaby i ruch kamery – Unity Hub, etap IV.
W następnej części serii e‑materiałów dotyczących tworzenia gry w Unity Hub zajmiemy się punktowanymi elementami, które gracz będzie zbierał, a ich suma będzie wyświetlana na ekranie. W ostatnim e‑materiale naprawimy ewentualne błędy i wyeksportujemy projekt, aby móc przekazać go graczom.
Słownik
urządzenie lub rozwiązanie służące do wykrywania (detekcji) parametrów fizycznych, zjawisk, obiektów; w przypadku gry rozwiązanie służące do wykrycia określonego położenia obiektu
rodzaj zasobu, którego instancje można wykorzystywać wielokrotnie w projekcie; jeśli zajdą zmiany w prefabie, Unity automatycznie wprowadzi je we wszystkich jego instancjach
słowo referencyjne, które można przypisać do jednego lub większej liczby obiektów; tagi pomagają zidentyfikować obiekty do celów skryptowych