Документация/Статьи/Обзор системы анимирования
From NeoAxis Engine Wiki
| Language: | Status: | Approved |
Contents |
Описание
Система анимирования - унифицированная система для настройки анимаций моделей в движке.
Основная работа по настройке анимаций заключается в том, чтобы настроить файл .animationTree для каждой из анимированных моделей. Файл содержит иерархическую структуру, представляющую собой дерево анимаций. В редакторе игровых объектов на этот файл должна ссылаться прикрепленная модель, которую необходимо анимировать.
Программисты могут настраивать влияние на состояние дерева анимаций из кода.
Для наглядного понимания работы системы анимирования предлагается посмотреть видео, которое показывает похожий формат от других разработчиков. Также здесь можно прочитать больше об этом формате.
На скриншоте показан открытый файл Robot.type в редакторе игровых объектов. Выделена прикрепленная модель, в которой свойство AnimationTree ссылается на файл дерева анимаций.
Формат .animationTree
В данный момент редактор анимационных деревьев еще не создан. До тех пор предлагается создавать файлы анимаций вручную в текстовом редакторе. Существует специальный формат для настройки анимаций, который мы рассмотрим ниже. Файлы с данным форматом имеют расширение .animationTree.
В качестве простого примера рассмотрим файл анимаций робота Robot.animationTree, который находится в SDK в директории Data\Types\Units\Robot\.
blocks { block Output { uin = 1 in = 100 } ///////////////////////////////////////////// //Attack trigger block Trigger { uin = 100 triggerName = "fire" off = 200 on = 101 } block Animation { uin = 101 animationName = "attack" speed = 1 } ///////////////////////////////////////////// //Select walk or idle block Transition { uin = 200 selectedIndexSource = 201 animation0 = 400 // go to idle animation animation1 = 310 // go to walk } block Parameter { uin = 201 parameterName = "move" value = 0 } ///////////////////////////////////////////// //Walk block Direction8Sides { uin = 310 angleSource = 311 speedMultiplierSource = 316 forward = 312 backward = 315 left = 312 right = 312 forwardLeft = 312 forwardRight = 312 backwardLeft = 315 backwardRight = 315 } block Parameter { uin = 311 parameterName = "moveAngle" value = 0 } block Parameter { uin = 316 parameterName = "moveSpeed" value = 1 } block Animation { uin = 312 animationName = "walkAgressive" speed = 0.6 } block Animation { uin = 315 animationName = "walkAgressive" speed = -0.6 } ///////////////////////////////////////////// //Idle block Animation { uin = 400 animationName = "idleAgressive" speed = 1 } ///////////////////////////////////////////// }
Как мы видим, дерево анимаций представляет собой тестовый файл в стандартном формате NeoAxis TextBlock. Файл включает в себя список блоков, соединенных между собой. Каждый блок имеет свой тип и уникальный идентификатор uin. Блоки связаны так, что вместе составляют дерево, корневым блоком которого является блок Output.
Для наглядного понимания работы системы анимирования предлагается посмотреть видео, которое показывает похожий формат от других разработчиков. Также здесь можно прочитать больше об этом формате.
Далее будут описаны блоки.
Блок Output
Данный блок является выходом всего дерева анимаций. Блок является корневым. В дереве анимаций может быть только один блок такого типа.
| Имя параметра | Тип параметра | Описание |
|---|---|---|
| in | Ссылка на блок | Источник анимаций, который будет результирующим во всём дереве. |
Блок AnimationSource
Источник анимации. Данный блок проигрывает одну анимацию с заданной скоростью.
| Имя параметра | Тип параметра | Описание |
|---|---|---|
| animationName | Строка | Имя анимации. |
| speedSource | Ссылка на блок | Источник скорости воспроизведения анимации. Данный блок будет получать значение скорости воспроизведения анимации из другого блока, который указан в этом параметре. |
| speed | Значение | Скорость воспроизведения анимации. Если указан параметр speedSource, то данный параметр игнорируется. |
Блок Blend
Блок смешивания анимаций. Блок выбирает две соседние анимации из списка и смешивает их. Анимации выбираются в зависимости от веса, который всегда находится в интервале от 0 до 1. В простейшем случае блок содержит две анимации. Тогда, чем больше будет вес, тем больше будет вес второй анимации. В случае, когда анимаций больше двух, вес будет указывать на две ближайшие анимации. Например, если блок имеет 4 анимации, и вес приближается к единице, то будут смешиваться две последние анимации.
| Имя параметра | Тип параметра | Описание |
|---|---|---|
| animation0, animation1, ..., animation{N} | Ссылка на блок | Источники анимаций. |
| weightSource | Ссылка на блок | Источник значения веса. |
| weightValue | Значение | Значение веса. Если указан параметр weightSource, то данный параметр игнорируется. |
Блок Parameter
Блок на выходе дает значение, которое могут использовать другие блоки как входной параметр.
Программисты могут изменять значение блока извне по его имени.
| Имя параметра | Тип параметра | Описание |
|---|---|---|
| parameterName | Строка | Имя параметра. |
| value | Значение | Текущее значение или значение по умолчанию. |
Блок Sum
Блок суммирует несколько анимаций.
Пример: Персожан имеет отдельные анимации торса и ног. Данный блок можно использовать для конечного смешивания всех анимация торса и анимаций ног.
| Имя параметра | Тип параметра | Описание |
|---|---|---|
| animation0, animation1, ..., animation{N} | Ссылка на блок | Источники анимаций. |
Блок Transition
Блок содержит список источников анимаций и выбирает один из источников по индексу. Индекс является целочисленным значением.
Пример: Персонаж может находиться в трех состояниях: стоит, сидит, лежит. Параметр animation0 будет ссылаться на анимацию стояния, animation1 на анимацию сидения и animation2 на анимацию лежания. В зависимости от значения индекса (0, 1, 2), персонаж будет то стоять, то сидеть, то лежать.
При изменении индекса, блок может плавно смешивать значения старого и нового значений. Для этого необходимо указать время перехода. По умолчанию время перехода равно 0.2 секунды.
| Имя параметра | Тип параметра | Описание |
|---|---|---|
| animation0, animation1, ..., animation{N} | Ссылка на блок | Источники анимаций. |
| selectedIndexSource | Ссылка на блок | Источник значения индекса. |
| selectedIndex | Значение | Значение индекса. Если указан параметр selectedIndexSource, то данный параметр игнорируется. |
| transitionTimeSource | Ссылка на блок | Источник значения времени перехода. |
| transitionTime | Значение | Значение времени перехода. Если указан параметр transitionTimeSource, то данный параметр игнорируется. |
Блок Trigger
Блок-переключать. Блок может быть в одном из двух состояний, активен или неактивен. В неактивном состоянии блок на выходе имеет значение параметра off. При активации блок будет выдавать значение параметра on. Блок автоматически выключается, когда анимация параметра on завершается.
Типичный пример использования блока - прыжок персонажа. Когда персонаж прыгает, то необходимо прервать все анимации и воспроизводить анимацию прыжка. При прыжке активируется данный блок. После того, как блок активирован, на его выходе будет значение параметра on. Параметр on должен ссылаться на анимацию прыжка.
Программисты могут активировать блок из кода, обращаясь к нему по имени.
При переключении блок может плавно смешивать значения параметров off и on. Для этого необходимо указать время перехода. По умолчанию время перехода равно 0.2 секунды.
| Имя параметра | Тип параметра | Описание |
|---|---|---|
| triggerName | Строка | Имя переключателя. |
| off | Ссылка на блок | Источник, когда блок выключен. |
| on | Ссылка на блок | Источник, когда блок включен. |
| transitionTimeBlock | Ссылка на блок | Источник значения времени перехода. |
| transitionTime | Значение | Значение времени перехода. Если указан параметр transitionTimeBlock, то данный параметр игнорируется. |
Блок Direction8Sides
Данный блок похож на блок Transition, за исключением того, что индекс определяется по углу. Блок удобно использовать для анимации ног персонажей, когда необходимо создать анимации движения персонажа. Поддерживается до 8 направлений. Блок можно использоваться и для меньшего количества направлений, например для четырех сторон или меньше.
При изменении угла, блок может плавно смешивать значения старого и нового значений. Для этого необходимо указать время перехода. По умолчанию время перехода равно 0.2 секунды.
В блоке можно указывать множитель скорости анимаций.
| Имя параметра | Тип параметра | Описание |
|---|---|---|
| forward, forwardLeft, forwardRight, left, right, backward, backwardLeft, backwardRight | Ссылка на блок | Источники анимаций. |
| angleSource | Ссылка на блок | Источник значения угла. |
| angle | Значение | Значение угла. Если указан параметр angleSource, то данный параметр игнорируется. |
| speedMultiplierSource | Ссылка на блок | Источник значения множителя скорости. |
| speedMultiplier | Значение | Значение множителя скорости. Если указан параметр speedMultiplierSource, то данный параметр игнорируется. |
| transitionTimeSource | Ссылка на блок | Источник значения времени перехода. |
| transitionTime | Значение | Значение времени перехода. Если указан параметр transitionTimeSource, то данный параметр игнорируется. |
Блок LookAt
Данный блок похож на блок Transition, за исключением того, что индекс определяется по двум углам, горизонтальному и вертикальному. Блок удобно использовать для анимации взгляда персонажа, когда необходимо сделать так, чтобы персонаж мог смотреть по сторонам. Поддерживается до 9 направлений. Блок можно использоваться и для меньшего количества направлений, например для четырех сторон или меньше.
При изменении углов, блок может плавно смешивать значения старого и нового направлений. Для этого необходимо указать скорости по каждому из углов, горизонтальному и вертикальному. По умолчанию скорость перехода равна нулю, что означает, что переход должен быть осуществлен мгновенно.
В блоке можно указывать множитель скорости анимаций.
| Имя параметра | Тип параметра | Описание |
|---|---|---|
| leftUp, leftCenter, leftDown, centerUp, centerCenter, centerDown, rightUp, rightCenter, rightDown | Ссылка на блок | Источники анимаций. |
| horizontalAngleSource | Ссылка на блок | Источник значения угла по горизонтали. |
| horizontalAngle | Значение | Значение угла по горизонтали. Если указан параметр horizontalAngleSource, то данный параметр игнорируется. |
| verticalAngleSource | Ссылка на блок | Источник значения угла по вертикали. |
| verticalAngle | Значение | Значение угла по вертикали. Если указан параметр verticalAngleSource, то данный параметр игнорируется. |
| speedMultiplierSource | Ссылка на блок | Источник значения множителя скорости. |
| speedMultiplier | Значение | Значение множителя скорости. Если указан параметр speedMultiplierSource, то данный параметр игнорируется. |
| horizontalAngleSpeedSource | Ссылка на блок | Источник значения скорости изменения угла по горизонтали. |
| horizontalAngleSpeed | Значение | Значение скорости изменения угла по горизонтали. Если указан параметр horizontalAngleSpeedSource, то данный параметр игнорируется. |
| verticalAngleSpeedSource | Ссылка на блок | Источник значения скорости изменения угла по вертикали. |
| verticalAngleSpeed | Значение | Значение скорости изменения угла по вертикали. Если указан параметр verticalAngleSpeedSource, то данный параметр игнорируется. |