Настройка выбора анимации
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_idlewalklie_holdback_in
Способы указания анимации
1. Конкретная анимация указывается с помощью блока параметра anm:
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.
Механика выбора анимаций по счетчику
Счётчик начинается со значения
0, при этом выбираются анимации из первого в спискеpick.При каждом вызове счетчика его значение увеличивается на
1, переходя к следующему варианту выбора.Счетчик работает по кольцу: если значение счётчика становится равно сумме всех значений
<N>, взятых изpick— его значение сбрасывается в0Внутри каждого
pick, перед применением, копируются значения анимаций, указанных вcommon, после чего они перезаписываются данными из текущегоpick, если такие есть. Таким образом,pickможет:наследовать
common,переопределять нужные поля,
дополнять базовый набор анимаций из common новыми ключами.
Базовый набор анимаций (блок common) может отсутствовать. В таком случае все наборы анимаций берутся непосредственно из каждого pick.
Пример выбора анимаций по счетчику
Количество шагов счетчика pose в цикле равно сумме всех N в блоках pick: 1+2+1+1=5
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.
В описаниях выбора анимаций поддерживаются вложенные условия.
Синтаксис вложенных условий: