Jak uniknąć spaghetti w animatorze?

9

Pracuję z animacjami w Unity i do tej pory stworzyłem tylko cztery (w górę w dół w lewo iw prawo), a moje okno animacji wygląda następująco ... wprowadź opis zdjęcia tutaj

Problem polega na tym, że gdybym poruszał się w górę, chcę, aby bohater nadal patrzył w górę, nie przechodził na „neutralną bezczynność” (lub jakkolwiek zaczął), ale to oznacza, że ​​mam 4 pozycje bezczynności ... i każda z nich może przejść w górę, w dół , W lewo lub w prawo i idą wykładniczo z każdą dodatkową akcją ...

Co sprawia, że ​​mam wrażenie, że robię coś złego ...

Czy istnieje lepszy sposób na przejście między różnymi działaniami?

Matas Vaitkevicius
źródło
Próbowałem to zrobić od dłuższego czasu. Niestety, mój wniosek jest taki, że po prostu nie możesz. Animator ZAWSZE zamienia się w sieć spaghetti i musimy z tym żyć. Rzuć okiem na ten film, który pomaga youtube.com/…
Nevermind

Odpowiedzi:

9

Tego rodzaju problem można rozwiązać za pomocą BlendTrees (ogólnie rozsądnym pomysłem jest często poleganie na drzewach mieszanych). Drzewo mieszania jest rodzajem stanu wielu animacji, który na podstawie parametru (parametrów pływających) decyduje, która z zawartych w nim animacji ma być aktualnie aktywna (lub alternatywnie uzyskana animacja może być mieszanką kilku animacji). Nawet jeśli animacje nie są mieszane, ale zamieniane, zamiana odbywa się w połowie animacji (tj. Jeśli animacja „wychodzenia” wynosi 35%, nowa jest odtwarzana od 35% do przodu). Z „zewnątrz” wszystko to jest ukryte, jakby to był jeden prosty / pojedynczy stan.

Na przykład masz drzewo mieszania z 8 animacjami duszka (bezczynne z 4 głównymi i 4 ukośnymi kierunkami). Drzewo mieszania ma dwa parametry - „poziomy” i „pionowy”. Na podstawie tych 2 parametrów drzewo mieszania zdecyduje, w którą animację grać. W oparciu o parametr „poziomy” drzewo mieszania wybierze między lewą / prawą animacją a parametr „pionowy” zadecyduje o animacji góra / dół. Następnie po połączeniu będziesz mieć wszystkie 8 animacji z przekątnymi (ten sam pomysł kryje się za joypadami / joystickami).

wprowadź opis zdjęcia tutaj

To trochę mylące, więc nawet jeśli StackExchange nie lubi linków, zamieszczę link do mojego krótkiego przykładowego filmu . Zwróć uwagę na prawą górną część ekranu. Szare kropki to „stany” / animacje, a aktywna to ta, która zamyka się z czerwoną kropką. Jak powiedziano na początku, może być jeszcze bardziej złożona, a każda animacja ma wpływ / siłę zależną od odległości do czerwonej kropki, co powoduje połączenie kilku animacji.

Z zewnątrz jest tylko jeden stan (drzewo mieszania), a kiedy zastosujesz tę samą koncepcję do chodzenia i ataku, będziesz mieć połączone tylko 3 stany.

Drzewa mieszania są tworzone prawym przyciskiem myszy na pustym obszarze Animatora Utwórz stan -> Z nowego drzewa mieszania. Stamtąd wszystko jest w Inspektorze. Po wybraniu drzewa mieszania możesz wybrać typ drzewa mieszania (1D, 2D itp.), Dodać animacje, ustawić je (względem wartości parametrów) i wybrać parametry sterujące.

Jeśli chcesz uzyskać więcej informacji o drzewach mieszania, zobacz filmy z Unity - Unite 2016 i samouczki Unity .

Nikaas
źródło
2

Problem polega na tym, że próbujesz powiązać wszystko ze sobą zamiast używać wyzwalacza do przełączania między biegami jałowymi. Powinieneś wybierać animację bezczynności za pomocą warunkowego typu if-else lub przełącznika. Stworzyłem schemat, który wygląda na znacznie ładniejszy (załóżmy, że jeden z nich jest domyślnym przypadkiem):

wprowadź opis zdjęcia tutaj

Dodatkowe informacje:

Rzuć okiem na parametry animacji, w jaki sposób ustawić parametry rozpoznawania animatora, automaty stanów do łączenia animacji, automaty stanów , aby sprawdzić ustawione zmienne.

John Hamilton
źródło
Cześć John, ale jak mam to zrobić? Dlaczego miałbym używać spustu, aby przełączać się między biegami jałowymi lub w ogóle przełączać się między biegami jałowymi? Jak wybrać bezczynną animaton, jeśli jeszcze? Również na schemacie, dlaczego miałbym przejść do idleleft, a następnie w lewo, a nie w lewo i przejść do idleleft, czekając na następną akcję, czy to powinno być na odwrót?
Matas Vaitkevicius
@MatasVaitkevicius Możesz ustawić i sprawdzić zmienne na końcu lub na początku animacji. Możesz stworzyć pustą animację, która nic nie robi, tylko sprawdzić obudowę, a następnie przekierować ją do następnej części lub utworzyć z niej warstwę abstrakcji. Podałem kilka linków do instrukcji, aby uzyskać więcej informacji.
John Hamilton,
Jak więc zrobić, jeśli inaczej z parametrami, które przełączałyby przejścia? Nie ma przykładu, wszystkie mechanizmy, które połączyłeś, po prostu wykonują ręczne przejście, tak jak ja w pytaniu ....
Matas Vaitkevicius
@MatasVaitkevicius Naprawdę powinieneś najpierw trochę poszukać
John Hamilton
Ale tak to zrobiłem. wyzwolić ogień w akcji i uruchamia animację, a następnie przechodzi w stan bezczynności dla tego kierunku ... Teraz mówisz (jeśli dobrze cię rozumiem), że mógłbym po animacji zamiast przejść w stan bezczynności w tym kierunku, aby przełączyć mechanizm wybrałby dla mnie odpowiednią bezczynność ... ale nigdzie nie widziałem takiego mechanizmu, czy mógłbyś skopiować go do swojej odpowiedzi proszę ...
Matas Vaitkevicius