Найти в Дзене
Stronghold of gamedev

Как движок смешивает анимации

Оглавление

Дневник разработки S.L. #4

Верно полагать один лишь канал толкает меня дальше как-то заниматься этим проектом. Не подумайте, желание творить искреннее, однако тут либо погружаться с головой, забивая на всё, либо никак :(

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

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

База

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

Вперед, назад, вправо, влево
Вперед, назад, вправо, влево

Смешиваются они в очень удобном Аниматоре.
Аниматор - это такая магическая приблуда Юнити, умеет интересные вещи, например работать с переменными из скрипта.

Как я уже писал в статье с созданием 3д анимации - каждая косточка имеет свои координаты, которые покадрово меняются в анимации, движок их перезаписывает.

Например при беге вперед в одном кадре косточка ноги имеет координату (1,0), а при беге вправо - (0,1) соответственно если мы зажмем клавиши вперед и вправо, косточка ноги в этом кадре будет иметь координату (0.5,0.5), ну и другие промежуточные координаты для плавной работы.

Смешивание

Для смешивания я создал так называемый BlendTree (Древо смешиваний)
и окунул туда все 4 анимации, переход между ними будет происходить благодаря двум переменным, которые отвечают за X и Y, грубо говоря код пошлет аниматору вектор направления движения, а аниматор создаст для этого анимацию.

Окно смешиваний
Окно смешиваний

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

-4

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

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

Код

-5

Выглядит крайне скучно, знаю. Покадрово скрипт отправляет значения в аниматор - булевые переменные "в битве ли Герой?" и "бежит ли Герой в битве?", а так же значения ввода. Да, не направление движения, а значения ввода, это почти одно и то же, только в векторе направления движения учитывается скорость, а в векторе ввода - нет, там сырые значения от -1 до 1.

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

Соседние статьи :
Зарождение боевой системы : передвижение и таргетинг /Дневник #3
Как анимируются персонажи. Создание анимации бега.
Как генерируется мир в Minecraft