Настройка выбора анимации

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

Принцип работы Animation Selector

При переходе юнита в новое состояние, обработчик состояния обращается к файлам Animation Selector, чтобы определить, какая анимация должна быть воспроизведена. В файле задаются:

  • наборы анимаций, доступные для данного состояния;

  • условия выбора конкретной анимации (например, в зависимости от позы, оружия, направления взгляда);

  • приоритеты и fallback-анимации.

Для каждого описания FSM в ресурсах есть одноименный файл Animation Selector (далее по тексту - Селектор).

Описания Селекторов хранятся в папке \properties\animation_selector\ . Файлы имеют расширение .set.

Примеры:

  • human.set — используется для объекта human.

  • animal.set — используется для объектов животных, например, horse.

Файлы анимаций размещаются либо в папке соответствующего объекта, либо в общем каталоге: \properties\animation\ и его подкаталогах.


Структура описания селектора

Описание селектора включают следующие элементы:

Для упрощения редактирования и повторного использования, рекомендовано выносить смысловые и повторяющиеся блоки выбора анимаций в отдельные .inc-файлы. Например, в ресурсе Men of War II файл human.set подключает смысловые блоки через include из внешних файлов.

Имя запроса на выбор анимаций

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

Примеры:

  • stand_idle

  • walk

  • lie_holdback_in


Способы указания анимации

1. Конкретная анимация указывается с помощью блока параметра anm:

Синтаксис для выбора конкретной анимации

  • Имя анимации указывается в двойных кавычках.

  • Запись " " означает пустую анимацию - новая анимация не будет запущена, а текущая анимация сохранится.

Пример выбора анимации с указанием конкретной анимации
  • lie_belt_in - имя запроса

  • блок if - условие для запуска анимации

  • lie_take_pistol - имя анимации, которая проигрывается со скоростью -1 ( минус означает, что анимация будет проигрываться с конца в начало)

  • lie_put_small - имя анимации, которая проигрывается со скоростью 0,75

2. Случайный выбор анимаций

Блок параметра random_select позволяет задать список альтернативных анимаций с различной вероятностью выбора:

Синтаксис для случайного выбора анимаций

Параметр weight задаёт относительную вероятность выбора n в диапазоне от 0.01 до 100.

Названия анимаций записываются в двойных кавычках.

Пример случайного выбора анимации по ее весу
  • Анимация squat_idle_rifle_2 с весом 5

  • Анимация squat_idle_rifle_3 с весом 2 и скоростью проигрывания -1 (проигрывается с конца к началу)

3. Выбор анимаций по счетчику

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

Синтаксис выбора анимаций по счетчику

Параметр
Назначение

<counter_name>

Имя счётчика, определяющего текущее состояние переключения

common

(Опционально) Параметр для назначения базового набора анимаций, который копируется в каждый pick перед его применением

pick <N>

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

Механика выбора анимаций по счетчику

  1. Счётчик начинается со значения 0, при этом выбираются анимации из первого в списке pick.

  2. При каждом вызове счетчика его значение увеличивается на 1, переходя к следующему варианту выбора.

  3. Счетчик работает по кольцу: если значение счётчика становится равно сумме всех значений <N>, взятых из pick — его значение сбрасывается в 0

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

    • наследовать common ,

    • переопределять нужные поля,

    • дополнять базовый набор анимаций из common новыми ключами.

Пример выбора анимаций по счетчику

Количество шагов счетчика pose в цикле равно сумме всех N в блоках pick: 1+2+1+1=5

Шаг
Значение pose
Выбор блока pick
Выбор анимаций

1

0

Первый блок pick

Полностью берутся значения анимаций из блока common (переопределений нет)

2

1

Второй блок pick

Значения параметров из блока common для aim и fire переопределяются на значения, указанные в текущем блоке pick

3

2

Второй блок pick

Значения параметров из блока common для aim и fire переопределяются на значения, указанные в текущем блоке pick

4

3

Третий блок pick

Значения параметров aim и fire берутся из блока common . В набор анимаций добавляется анимация idle

5

4

Четвертый блок pick

Анимация idle заменяется на указанную в текущем pick, значения анимации aim и fire остаются соответствующими значениям из common

6

5 → сброс в 0

Снова первый блок pick

цикл повторяется, начиная с первого шага

Скорость анимации

Скорость проигрывания анимации задаётся числом, следующим после имени анимации. Пример:

  • Если скорость анимации не указана, то используется значение по умолчанию: 1.0

  • Отрицательные значения скорости — означает реверсное воспроизведение анимации.

Условия в Селекторе анимаций

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

Условия задаются внутри блока if и могут быть:

  • одиночными,

  • составными,

  • вложенными.

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

Синтаксис условия в Селекторе анимаций:

Условие может быть простым или составным. В случае составного условия его части перечисляются через пробел, что является аналогом логического оператора and.

Синтаксис составных условий

В Селекторе idle-запросов в составных условиях могут использоваться условные операторы not и or.

В описаниях выбора анимаций поддерживаются вложенные условия.

Синтаксис вложенных условий: