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ę.
Następnym razem spróbujemy się zmierzyć z podmianą spritów – żeby zrobić zmianę ciuszków albo noszenie broni.
Do zobaczenia.
2 komentarze do “Postać 2D w Unity – odwrotna kinematyka”