Hero background image
Советы по созданию контроллеров аниматора в Unity

Создавайте контроллеры-аниматоры для своих персонажей так же, как если бы вы создавали сценарий, чтобы их было достаточно просто использовать, поддерживать и отлаживать на протяжении всего цикла разработки.

Все скриншоты ниже взяты из анимации персонажа Генри из Firewatch от Campo Santo.

Смешать изображение дерева
Скрыть сложность в Blend Trees

Деревья смешивания отлично подходят для сокрытия сложности. Дерево смешивания не имеет состояния, поскольку оно не вызывает обратного вызова в код. Он смешивает разные клипы на основе заданных вами параметров.

Значение этого в том, что вы можете перебирать деревья смешивания, не беспокоясь о том, что сломаете остальную часть вашей игры. Вы можете скрыть сложную сеть состояний и предотвратить ошибки в будущем, поскольку вы не можете связать поведение с большинством анимаций в дереве смешивания.

Аниматор утверждает
Думайте о слоях как о классе скрипта.

Полезно думать о слоях как о классе в скрипте. Вы хотите, чтобы все в слое выполняло одну и ту же логическую и поведенческую функцию. Это связано с тем, что каждый отдельный слой контролирует, какие другие слои он переопределяет – влияет ли он на определенные кости, является ли этот слой аддитивным и так далее.

Повторное использование шаблонов

Повторно используемые логические шаблоны в машинах состояний и подсостояний ускоряют разработку, облегчают отладку и могут уменьшить количество ошибок, при этом позволяя нескольким людям создавать одинаковый контент.

В следующих разделах представлены шаблоны, полезные для структурирования слоев.

Ступица и спицы аниматоров
Ступица и говорила

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

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

Вход на выход аниматоров
Общий шаблон входа/выхода

Группируя состояния по шаблону «вступление» — выполнение/цикл — «завершение», вы можете четко прикрепить любые анимационные события или поведение конечного автомата к вступительному и завершающему состояниям. Как и в случае с деревом смешивания, вы можете перебирать и изменять внутренние состояния выполнения/цикла, не беспокоясь о том, что игра сломается.

Разделение и расчет шаблона
Критический раздел и шаблон расчета

Для прерываемой анимации, особенно анимации, управляемой игроком, разбейте клип на две части. Во-первых, поддерживайте критический раздел, содержащий все изменения состояния, эффекты и повреждения, которые всегда должны воспроизводиться до завершения. Во-вторых, придумайте анимацию стабилизации, которая будет хорошо выглядеть, возвращая вас в режим ожидания и которая может быть прервана новым вводом.

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

Не пишите сложный код внутри поведения конечного автомата.

Поведения конечного автомата — это фрагменты кода, которые можно прикрепить к любому состоянию анимации. Используйте их, чтобы связать поведение непосредственно с состоянием самого аниматора.

Избегайте написания внутри них сложного игрового кода, потому что может быть сложно отследить, откуда берутся изменения в состоянии. Если вы используете поведение конечного автомата для управления кодом игрового процесса, используйте систему обмена сообщениями; поговорите с классом менеджера или запустите свой код из параметров на более высоком уровне.

Debug.Break() — одно из наиболее эффективных вариантов поведения конечного автомата, которые вы можете использовать. Прикрепите его в любом месте настройки анимации, и вы получите точку останова, аналогичную системе визуальных сценариев.

При необходимости используйте код C#. Вместо управления сотнями или тысячами переходов или повсеместного подключения переходов AnyState используйте Animator.Play или Animator.CrossFade для динамического создания прямых переходов из кода. Если вам все еще недостаточно контроля, загляните в Unity’s Playables API, чтобы узнать больше о способах анимации с помощью кода. Некоторые примеры можно найти здесь.

Поведение конечного автомата
Используйте поведение конечного автомата, чтобы гарантировать, что события анимации всегда срабатывают.

Анимационные события связывают конкретный момент вашего анимационного клипа с конкретным изменением состояния в вашей игре. Их можно использовать для выделения таких элементов, как визуальные и звуковые эффекты. Однако если вы выйдете из клипа до того, как он был запущен, он никогда не сработает. Один из способов решения этой проблемы — добавить поведение конечного автомата, которое гарантирует, что событие всегда срабатывает при достижении определенного момента времени, независимо от того, что еще происходит (или не происходит) в игре.

Дополнительные ресурсы
Был ли этот контент полезен?