Как избежать спагетти в аниматоре?

9

Я работаю с анимацией в Unity, и до сих пор я сделал только четыре (вверх и вниз влево и вправо), и мое окно анимации выглядит следующим образом ... введите описание изображения здесь

Проблема в том, что если я двигался вверх, я хочу, чтобы герой продолжал искать вверх, а не переходил на «нейтральное холостое ход» (или как бы он ни начинал), но это означает, что у меня есть 4 холостых позиции… и каждая из них может переходить на «вверх», «вниз» , Влево или вправо, и они идут экспоненциально с каждым дополнительным действием ...

Что заставляет меня чувствовать, что я делаю что-то не так ...

Есть ли лучший способ сделать переход между различными действиями?

Матас Вайткявичюс
источник
Я пытался сделать это в течение длительного времени. К сожалению, мой вывод, вы просто не можете. Аниматор ВСЕГДА превращается в паутину спагетти и с этим надо жить. Посмотрите на это видео , хотя, это помогает youtube.com/...
Nevermind

Ответы:

9

Вы можете решить этот тип проблемы с помощью BlendTrees (в общем, мудрая идея часто полагаться на смешанные деревья). Смешанное дерево является своего рода мульти-анимационным состоянием, которое на основе параметра (параметров) (float) решает, какая из анимаций в нем содержится, чтобы быть активными в данный момент (или, в качестве альтернативы, результирующая анимация может быть смесью нескольких анимаций). Даже когда анимации не смешаны, а поменяны местами, перестановка происходит в середине анимации (то есть, если анимация «выхода» составляет 35%, новая воспроизводится с 35% вперед). С внешней стороны все это скрыто, как будто это одно простое / единичное состояние.

Например, у вас есть смешанное дерево с 8 спрайтовыми анимациями (простаивает с 4 основными и 4 диагональными направлениями). В этом дереве смешивания есть 2 параметра - «горизонтальный» и «вертикальный». И на основе этих двух параметров дерево смешивания решит, какую анимацию воспроизводить. Основываясь на «горизонтальном» параметре, дерево смешивания будет выбирать между левой / правой анимацией, а «вертикальный» параметр будет определять анимацию сверху / снизу. Затем при объединении вы получите все 8 анимаций с диагоналями (это та же идея, что и за джойстиками / джойстиками).

введите описание изображения здесь

Это немного сбивает с толку, поэтому, даже если StackExchange не любит ссылки, я приведу короткий пример видео, которое я сделал. Обратите внимание на верхнюю правую часть экрана. Серые точки - это «состояния» / анимации, а активными являются те, которые закрываются красной точкой. Как было сказано в начале, это может быть еще более сложным, и каждая анимация может иметь влияние / силу в зависимости от ее расстояния до красной точки, что приводит к смешению нескольких анимаций.

Снаружи это только одно состояние (дерево смешения), и когда вы применяете одну и ту же концепцию для ходьбы и атаки, у вас будет только 3 связанных состояния.

Деревья смешивания создаются с помощью щелчка правой кнопкой мыши на пустой области аниматора Создать состояние -> Из нового дерева смешивания. Оттуда все в Инспекторе. Выбрав дерево смешивания, вы можете выбрать тип дерева смешивания (1D, 2D и т. Д.), Добавить анимацию, расположить их (относительно значений параметров) и выбрать управляющие параметры.

Если вам нужна дополнительная информация о Blend Trees, то ниже приведены видео с Unity - Unite 2016 и учебники Unity .

Nikaas
источник
2

Проблема здесь в том, что вы пытаетесь связать все вместе вместо использования триггера для переключения между холостыми оборотами. Вы должны выбрать бездействующую анимацию, используя условный тип if-else или switch-case. Я сделал диаграмму, которая выглядит намного аккуратнее (предположим, что один из них - случай по умолчанию):

введите описание изображения здесь

Дополнительная информация:

Посмотрите на параметры анимации о том , как установить параметры для аниматора , чтобы признать, государственные машины для объединения анимации вместе, State Machine Поведения для того, как проверить переменные , которые вы установили.

Джон Гамильтон
источник
Привет Джон, но как я могу это сделать? Зачем мне использовать триггер для переключения между холостыми оборотами или вообще переключаться между холостыми? Как выбрать аниматон в режиме ожидания, если еще? Также на диаграмме, почему я должен перейти в режим холостого хода, а затем влево, а не влево, и перейти в режим холостого хода в ожидании следующего действия, или это должно быть наоборот?
Матас Вайткявичюс
@MatasVaitkevicius Вы можете устанавливать и проверять переменные в конце или в начале анимации. Вы можете создать пустую анимацию, которая ничего не делает, кроме проверки регистра, а затем перенаправить ее на следующую часть или сделать из нее слой абстракции. Я включил несколько ссылок на руководства для получения дополнительной информации.
Джон Гамильтон
Итак, как мне сделать, если еще с параметрами, которые будут переключать переходы? Нет примера, чтобы все механизмы, которые вы связали, просто выполняют ручной переход, как я делал в вопросе ...
Матас Вайткявичюс
@MatasVaitkevicius Вы действительно должны сначала немного поискать
Джон Гамильтон
Но вот как я это сделал. запускать действие и запускать анимацию, затем она переходит в режим ожидания для этого направления ... Теперь, что вы говорите (если я вас правильно понимаю), что я мог бы после анимации вместо того, чтобы переходить в режим ожидания для этого направления, перейти к механизму переключения, который выбрал бы подходящий для меня режим холостого хода ... но я нигде не видел такого механизма, не могли бы вы скопировать его в свой ответ, пожалуйста ....
Матас Вайткявичюс