Настройка анимаций передвижения в юнити

Предисловие:

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

Mixamo:

Начнём с того что выберем сами анимации. Для создания базового движения нам потребуется как минимум 3 анимации:

● Idle - анимация когда персонаж стоит на месте и совершает небольшие движения, например дышит;

● Walk - анимация ходьбы;

● Run - анимация бега.

Где же нам безболезненно найти эти анимации? Существует бесплатный сервис, который предоставляет доступ к сотням самых различных анимаций и моделей персонажей, он называется Adobe Mixamo. После несложной регистрации мы можем загрузить туда нашу модель персонажа или выбрать из представленных на сайте. В случае если на нашей модели не было рига, mixamo имеет встроенный auto rigger и автоматически предложит им воспользоваться, там нужно просто указать на нашей модели ключевые точки такие как: локти, колени, подбородок и пах. После этого мы вводим в поиске поочерёдно название интересующих нас анимаций и скачиваем понравившиеся.

Первичная настройка в Unity:

Итак, мы скачали и экспортировали анимации в Unity, теперь нам необходимо их настроить.

  • Выбрав саму анимацию в окне инспектор, необходимо перейти в раздел rig. Далее в пункте animation type надо выбрать humanoid. Чаще всего встречаются гуманоидные персонажи, это те которые похожи на людей, две руки, две ноги. И если мы установим animation type humanoid, то сможем использовать эту анимацию на любом гуманоидном персонаже в нашей игре, как правило это удобно. Для персонажей, которые отличаются строением тела от людей принято использовать animation type generic, но об этом в другой раз. Следующий пункт - avatar definition. Аватар это образ модели, позволяющий понять анимации к какому персонажу она относится. В нашем случае, так как мы используем humanoid, оставляем этот пункт на create from this model. На этом с разделом rig заканчиваем, жмем apply и переходим в раздел animation.
  • В этом разделе мы можем назначить имя анимации, так как скорее всего дефолтное нас не устроит. В этом же разделе представлены пункты поведения самой анимации. Рассмотрим основные из них:

○ Loop time - отвечает за автоматическое зацикливание анимации, если например мы используем анимацию смерти, которая должна проиграться только единожды, то эту галочку нужно снять. В нашем случае наши анимации должны быть зациклены, поэтому отмечаем галочку. Также loop time имеет подпункты loop pose и cycle offset. Первый отвечает за зацикливание именно движения персонажа, второй за то с какого места анимация будет воспроизводиться. Нам будет достаточно просто отметить loop time.

○ Root transform rotation - этот пункт регулирует то насколько анимация будет влиять на поворот родительского объекта в оси Y. Для простых персонажей, не использующих root motion,в этом и последующих пунктах всегда лучше блокировать анимациям любые возможности повлиять на сам объект персонажа. Для этого отмечаем галочку bake into pose, а Based Upon ставим original

○ Root transform position Y - отвечает за сдвиг персонажа по оси Y. Отмечаем все пункты по аналогии с предыдущим.

○ Root transform position XZ -отвечает за сдвиг персонажа по осям X и Z. Также как и в предыдущих пунктах блокируем любой возможный сдвиг.

После этого первичная настройка анимаций завершена и мы готовы перейти к следующему пункту. Нажимаем apply.

Подготовка к работе с аниматором:

Итак, вот настройки анимаций завершены и нам уже не терпится примерить их на персонажа в самой игре. Для этого на нашу модель персонажа, которая является чайлдом рутового объекта самого персонажа, необходимо добавить компонент аниматор. У него тоже есть несколько пунктов:

● Culling mode - определяет, то будет ли работать аниматор, когда наш персонаж не попадает в кадр. Ставим cool completely, это будет отключать анимацию, на персонажах за кадром, что даст прирост производительности.

● Update mode - определяет то будет ли влиять на наши анимации замедление или ускорение времени. Normal - будет, Unscaled time - не будет.

● Apply root motion - определяет будет ли применено движение из анимаций (если таковое предусмотрено) к объекту нашего аниматора. Нам в данном случае это ни к чему, так что галочку оставляем пустой.

● Avatar - здесь нам необходимо указать аватара нашей модели. Для того чтобы его создать надо перейти в нашу модель, через иерархию проекта, в инспекторе выбрать rig и там в avatar definition выбрать create from this model и нажать apply. После чего аватар создастся чайлдом нашей модели и мы сможем перетащить его в аниматор.

● Animator controller - то самое анимационное дерево хранящее в себе то как именно анимации будут проигрываться и в какой последовательности. Для того чтобы его создать нужно кликнуть правой кнопкой мыши в иерархии проекта, create, animator controller. После этого перетянуть созданный контроллер в наш компонент аниматора на сцене.

Animator controller:

И вот мы подошли к последнему, но не по важности, пункту нашего урока.

Контроллер представляет собой граф в котором мы можем создавать различные анимационные стейты, переходы между ними, а также задавать различные параметры такие как : float, bool, trigger. Если float и bool - понятно что такое, то trigger это что-то новое, на деле он просто вызывает то или иное событие (как правило переход между стейтами) при активации.

Сами стейты бывают нескольких видов:

● Empty - пустой стейт, при переходе в него персонаж займет свою исходную т-позу.

● Обычный анимационный стейт - содержит анимационный клип, который будет проигран при переходе в данный стейт.

● Сабстейт - позволяет сделать аниматор контроллер внутри другого аниматор контроллера (где-то здесь торчат уши xzibit'a)

● Blend tree - идеально подходит для создания плавного смешивания анимаций персонажа, рассмотрим его подробнее.

Для того чтобы создать новый blend tree, нужно кликнуть правой кнопкой мыши в пустом месте графа, create, from new blend tree. После этого можно дважды щелкнуть по создавшемуся стейту, чтобы перейти внутрь него. Здесь уже есть стейт blend tree. Выбрав его, в инспекторе откроется его меню, оно содержит несколько пунктов:

● Blend type - определяет тип смешивания, зачастую в простых играх используется 1D. Он позволяет смешивать анимации с помощью одной оси. Есть еще 2D freedom directional, он позволяет реализовывать такие вещи как стрейф. Когда ваш персонаж может и бежать вперёд и вбок и по диагонали, но о нём в другой раз. Сейчас выбираем 1D.

● Parametr - определяет float параметр, который будет управлять смешиванием. Его очень удобно в последствиии привязать к инпуту из кода. Например к магнитуде виртуального джойстика или к input.Axis

● Лист motion - список самих анимаций. Нажав на плюсик мы создадим новый пустой элемент этого списка. Теперь нам надо перетянуть в него наши анимации так чтобы они располагались по порядку - idle, walk, run. Возле каждого элемента есть два числовых значения - threshold отвечает за то на каком именно значении parameter эта анимация будет проигрываться на 100%. И скорость проигрывания анимации.

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

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

Заключение:

Что ж, мои поздравления, сегодня мы усвоили:

  • Как работать с mixamo
  • Как настраивать анимации после экспорта в Unity
  • Как создавать и настраивать animator component и animator controller
  • Как создавать и настраивать blend tree

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

Начать дискуссию