тоже зависит от этих анимаций?
Да. Зависимость не прямая, а через анимации объекта.
Процесс взаимодействия модели человека (далее "человек") с интерактивной моделью (далее "объект") происходит примерно так. Игрок берёт объект в фокус и нажимает ЛКМ. Движок проверяет содержимое параметров
UseWithItem и
conditionFunc объекта. Названия написаны по памяти, могу ошибаться. По результатам проверки движок может отказать в начале взаимодействия, но сейчас на этом останавливаться не будем, предположим, что взаимодействие разрешено. Начинается проигрывание анимаций и человека, и объекта. Движок синхронизирует проигрывание этих анимаций, но и анимации, сами по себе, должны совпадать друг с другом по количеству кадров и, возможно, по перемещению костей и слотов.
В самом начале взаимодействия происходит мини-телепорт человека к объекту. Положение базовой кости скелета человека совмещается с положением специального слота объекта или она перемещается на определённое расстояние от объекта. Человек проигрывает анимацию
STAND_2_S0*, и переходит в состояние
S0**. Объект тоже переходит в состояние
S0. Переходной анимации у объекта для этого, как правило, нет. Далее игрок нажимает клавишу
W на клавиатуре.*** И человек, и объект начинают проигрывать анимацию
S0_2_S1. Далее человек и объект переходят в состояние
S1. Движок проверяет содержимое параметра
onStateFunc объекта и, если там прописано название функции, вызывает функцию с таким названием из скриптов****. Для завершения взаимодействия игрок нажимает клавишу
S на клавиатуре. Также команда на завершение взаимодействия может поступить из скриптов или из движка. Состояние
S1 прерывается. Человек и объект начинают проигрывать анимацию
S1_2_S0 и переходят в состояние
S0. Движок снова проверяет содержимое параметра
onStateFunc объекта и, при необходимости, вызывает скриптовую функцию. Далее проигрывание анимаций объекта обычно заканчивается, а человек проигрывает анимацию
S0_2_STAND. На этом взаимодействие заканчивается.
* - Здесь приведена часть названия анимации.
2 - это аналог
To.
STAND_2_S0 означает "из
STAND в
S0".
STAND_2_S0 - это переходная анимация из одного состояния в другое. В начале названия таких анимаций используется префикс
T.
** -
S0 - это анимация-состояние. В таком состоянии модель может быть неподвижной или может проигрывать зацикленную анимацию. Состояние может продолжаться неопределённо долго. В начале названия таких анимаций используется префикс
S.
*** - В Г2 это ненужно, поскольку движок делает это за игрока.
**** - Название скриптовой функции формируется из двух частей. Первая часть прописана в параметре
onStateFunc. К этой части прибавляется суффикс, зависящий от состояния, в которое переходит объект. Это, например,
_S1 или
_S0, но возможно и большее количество состояний.