Настройка выбора анимаций
Animation Selector — это набор конфигурационных файлов, используемых для задания правил выбора и воспроизведения анимаций в зависимости от текущего состояния конечного автомата состояний (FSM) юнита.
Принцип работы Animation Selector
При переходе юнита в новое состояние, обработчик состояния обращается к файлам Animation Selector, чтобы определить, какая анимация должна быть воспроизведена. В файле задаются:
наборы анимаций, доступные для данного состояния;
условия выбора конкретной анимации (например, в зависимости от позы, оружия, направления взгляда);
приоритеты и fallback-анимации.
Для каждого описания FSM в ресурсах есть одноименный файл Animation Selector (далее по тексту - Селектор).
Описания Селекторов хранятся в папке \properties\animation_selector\
. Файлы имеют расширение .set
.
Примеры:
human.set
— используется для объектаhuman
.animal.set
— используется для объектов животных, например,horse
.
Файлы анимаций размещаются либо в папке соответствующего объекта, либо в общем каталоге: \properties\animation\
и его подкаталогах.
Структура описания селектора
Описание селектора включают следующие элементы:
Условие ;
Имя запроса на выбор анимаций
Имя запроса в Селекторе анимаций обычно соответствует имени состояния анимируемого объекта. Имя запроса может включать слова, поясняющий контекст происходящего.
Примеры:
stand_idle
walk
lie_holdback_in
Способы указания анимации
1. Конкретная анимация указывается с помощью блока параметра anm
:
anm
:{anm "animation_name"}
Имя анимации указывается в двойных кавычках.
Запись
" "
означает пустую анимацию - новая анимация не будет запущена, а текущая анимация сохранится.
2. Случайный выбор анимаций
Блок параметра random_select
позволяет задать список альтернативных анимаций с различной вероятностью выбора:
{random_select
{weight n1 "animation_1"}
{weight n2 "animation_2"}
...
}
Параметр weight
задаёт относительную вероятность выбора n
в диапазоне от 0.01
до 100
.
3. Выбор анимаций по счетчику
Циклическое переключение наборов анимаций на основе числового счётчика реализуется с помощью управляющего блока switch_by_counter
. Конструкция используется для создания вариативных анимаций — таких как позы, походки, реакции, эмоциональные состояния и другие повторяющиеся состояния персонажа.
Синтаксис выбора анимаций по счетчику
{switch_by_counter <counter_name> {common [...]} {pick <N> [...]} {pick <N> [...]} ... }
<counter_name>
Имя счётчика, определяющего текущее состояние переключения
common
(Опционально) Параметр для назначения базового набора анимаций, который копируется в каждый pick перед его применением
pick <N>
Вариант выбора анимаций. Значение N означает, сколько шагов счётчика подряд будет применяться этот pick.
Механика выбора анимаций по счетчику
Счётчик начинается со значения
0
, при этом выбираются анимации из первого в спискеpick
.При каждом вызове счетчика его значение увеличивается на
1
, переходя к следующему варианту выбора.Счетчик работает по кольцу: если значение счётчика становится равно сумме всех значений
<N>
, взятых изpick
— его значение сбрасывается в0
Внутри каждого
pick
, перед применением, копируются значения анимаций, указанных вcommon
, после чего они перезаписываются данными из текущегоpick
, если такие есть. Таким образом,pick
может:наследовать
common
,переопределять нужные поля,
дополнять базовый набор анимаций из common новыми ключами.
Базовый набор анимаций (блок common
) может отсутствовать. В таком случае все наборы анимаций берутся непосредственно из каждого pick
.
Условия в Селекторе
Система Animation Selector
поддерживает использование условий, позволяющих адаптировать выбор анимации к контексту текущего состояния или окружения актёра.
Условия задаются внутри блока if
и могут быть:
одиночными,
составными,
вложенными.
В качестве условий могут использоваться любые условия, подходящие для данного типа актера. Если условие срабатывает, выбор анимации осуществляется только среди вложенных в этот блок вариантов. Если ни одно условие не выполнено и не задана анимация по умолчанию, то активная анимация остаётся без изменений.
Синтаксис условия в Селекторе анимаций:
{if [condition] [...] ;anm или random_select }
Условие может быть простым или составным. В случае составного условия его части перечисляются через пробел.
Синтаксис составных условий
{if cond1 cond2 cond3 [...] }
В описаниях выбора анимаций поддерживаются вложенные условия.
Синтаксис вложенных условий:
{if cond1 {if cond2 {anm "animation_1"} } {anm "animation_2"} }
Скорость анимации
Скорость проигрывания анимации задаётся числом, следующим после имени анимации. Пример:
{anm "animation_name" 0.75}
Если скорость анимации не указана, то используется значение по умолчанию:
1.0
Отрицательные значения скорости — означает реверсное воспроизведение анимации.
Last updated