Postać 2D w Unity – odwrotna kinematyka

Poprzednim razem przygotowaliśmy sobie postać do animacji.

Możemy ją teraz animować za pomocą kinematyki prostej (ang. forward kinematics, FK).

Myślę, że wszyscy wiedzą o co chodzi – w tym momencie obrót kości nadrzędnej powoduje ruch wszystkich kości podrzędnych – np. obracając udem obracamy całą nogą.

Da się tak zrobić animację, ale jest to pracochłonne i efekty są mizerne.

Żeby ułatwić robotę wymyślono więc kinematykę odwrotną (ang. inverse kinematics, IK).

W tej metodzie animujemy „koniec” hierarchii – np. stopę czy dłoń, a pozostałe kości ustawiają się automagicznie stosując się do podanych ograniczeń.

Dzisiaj skonfigurujemy odwrotną kinematykę w naszej postaci 2D.

Przygotowania czyli potrzebne pakiety

Klikamy Window / Package manager i instalujemy pakiet 2D IK.

I już. Resztę zainstalowaliśmy poprzednio.

Dodajemy IK Manager 2D

Działamy. Wrzucamy postać przygotowaną w poprzednim tutorialu na scenę.

Rozwijamy jej drzewko i szukamy głównej kości (czyli naszego root bone). Do tej kości dodajemy IK managera:

Konfigurujemy Limb Solver

Klikamy +. W rozwijanym menu będziemy mieli do wyboru 3 różne solvery: Chain (CCD), Chain (FABRIC) i Limb.

Są to różne algorytmy służące do ustawiania kości.

Na razie skorzystamy z najprostszego i najłatwiejszego do skonfigurowania czyli Limb.

Jest on przeznaczony właśnie do kończyn postaci. Jego działanie jest ograniczone do trzech kości co pięknie pasuje do zestawów: udo-piszczel-stopa czy ramię-przedramię-dłoń.

No to wybieramy Limb.

Unity stworzy nam obiekt New LimbSolver2D. Przenazywamy go na LH LimbSolver2D i konfigurujemy do obsługi lewej ręki naszej postaci.

Mamy tu ustawienia naszego solvera. Najważniejsze są pola Effector i Target.

Effector to ostatnia kość łańcucha która będzie próbowała osiągnąć zadaną pozycję.

Target to obiekt który będziemy przesuwać – to cel ruchu naszej kończyny.

Zaraz to wszystko się pojaśni 🙂

W pole Effector upuszczamy kość lewej dłoni – bo to ona będzie końcowym elementem kończyny.

Niżej klikamy na Create Target. Unity utworzy nam obiekt „cel” jako dziecko naszego LH LimbSolvera2D. Wybieramy ten obiekt i ruszając nim możemy sterować kończyną ze skonfigurowaną odwrotną kinematyką.

Warto też odznaczyć Constrain rotation – żeby dłoń nam się obracała.

Wszystko to widać na ruchomym obrazku poniżej:

W taki sam sposób możemy skonfigurować pozostałe kończyny. Warty uwagi jest też przełącznik Flip – pozwala on przestawić kolano czy łokieć aby zginało się w drugą stronę:

Rach, ciach druga noga i mamy komplet kończyn skonfigurowany.

I, proszę się nie śmiać, ale można w miarę szybko ulepić coś co z daleka wygląda jak chód.

Teraz tylko w zależności od doświadczenia: pare minut, godzin albo dni żeby to dopieścić i mamy animację 🙂

Pokazałem tu tylko proste ustawianie kończyn, a mamy do dyspozycji jeszcze solvery CCD i FABRIK – w nich możemy np. skonfigurować jak dużo kości jest w łańcuchu IK. Przyda się to przy robieniu ogona czy macki.

Póki co te funkcje szkieletów 2D w Unity są solidnie ograniczone – to wersja „preview” – nie mamy np. możliwości ograniczenia ruchu kości, nie możemy sobie obiektu Target wyciągnąć poza szkielet żeby móc łatwiej animować.

Nowsze wersje zarówno pakiet 2D Animation jak i 2D IK są w niestabilnym Unity 2020.1 – będzie co sprawdzać jak 2020.1 wyjdzie z alfy i wejdzie w betę.