Animacja i animator

Nieodłącznym elementem gier 2D jest animacja poklatkowa.
To właśnie ten element budzi do życia statyczne obiekty.
Bez niej, ruch wyglądałby jak przesuwanie pionków po szachownicy.

Środowisko

Kilka wpisów temu przedstawiałem proces tworzenia gracza, wroga, itd.
Do ich wyświetlenia używałem dwóch komponentów: Mesh Filter i Renderer.

Niestety trzeba będzie je usunąć i zastosować Sprite Renderer.
Musimy także zmienić typ załadowanych tekstur z Texture na Sprite (2D and UI).

Kolejnym krokiem do rozpoczęcia zabawy z animacjami jest utworzenie kontrolera.
Musimy kliknąć PPM w zakładce Project i wybrać nowy Animator Controller.

Ostatnim etapem jest podpięcie komponentu Anitmatora do obiektu oraz przypisanie mu kontrolera. Całość powinna wyglądać mniej więcej tak:

Animacja

Musimy sobie otworzyć widoki Animation i Animator, przy użyciu przycisku Window w menu głównym programu. Na pierwszy ogień weźmiemy Animation.

Po zaznaczeniu w Hierarchy obiektu, który posiada komponent Sprite Renderer, będziemy mogli utworzyć nowy ‚klip’. Jeśli naszym celem jest stworzenie normalnej animacji zmienimy mu klatkowanie z 60 na 12 sampli. Nie potrzebujemy wyświetlać większej ilości klatek na sekundę.

Property umożliwiają dokładniejsze wskazanie, jakim elementom chcemy nadać ruch. U mnie będą to 2 małe sprite’y Left i Right. W hierarchii reprezentują lewy i prawy silnik statku. Teraz wystarczy poprzeciągać odpowiednie obrazki na oś czasu.

Animator

Okienko edycji kontrolera wygląda trochę ciekawiej. Po lewej stronie ustawiamy mu parametry (Float, Int, Bool, Trigger), do których odwołamy się później w skrypcie.

Środkowa część składa się z bloczków oraz strzałek pomiędzy nimi. Całość działa na zasadzie maszyny stanów / automatu skończonego. Do pojedynczego bloczku możemy przypisać jedną animację. Strzałki przejść (tzw. Transitions) posiadają sekcję warunkową, w której możemy ustawić kiedy mają zmienić stan A na B.

Logika

Ostatni etap będzie tym najbardziej przyjemnym. Niestety ustawianie zmiennych animatora odbywa się na zasadzie stringów. Nie wrzucam ich do stałych, ponieważ zmienne będą unikatowe dla kontrolerów animacji, a nie chcę zrobić śmietnika w Constants.cs.

Krótko: pobieramy komponent animatora i ustawiamy odpowiednie wartości zmiennym. Mi – w tym przypadku – wystarczy boolean:

Do tworzenia gif’ów używam od kilku miesięcy tego programiku.
Animacja silników wykonuje się tylko wtedy, gdy gracz leci w górę ekranu.
Oczywiście trzeba będzie dostosować w przyszłości wszystkie czasy.
Końcowy efekt wygląda chwilowo tak: (lewy silnik jest krzywo narysowany…)

MoveForward