вернуться на beanet.ru вернуться к списку проектов вернуться на главную страницу сборника

Тема: scripted_sequence (энтити)


Ключевые слова: управление NPC, анимация, контроль над NPC, заставить NPC выполнить действие

См. также: logic_choreographed_scene, Сложные скриптовые сцены (choreographed scenes) в редакторе FacePoser
Список используемых понятий, сокращений и обозначений

перейти к общему списку

Предназначена для управления NPC - заставляет их выполнять определенные анимации. NPC можно заставить сначала переместиться в позицию scripted_sequence, а потом выполнить нужную анимацию, либо NPC выполнит анимацию, не подходя к scripted_sequence.
Во время действия данной энтити искусственный интеллект подконтрольного NPC подавляется.
Если нескольким scripted_sequence задать одно и то же имя, это вынудит подконтрольных NPC одновременно начать выполнять свои анимации, как только все они подойдут к соответствующим scripted_sequence. Эту особенность можно использовать для изображения сцен с взаимодействующими NPC. При этом не забудьте задать атрибут Pre Action Idle Animation (иначе NPC во время ожидания могут выполнять произвольные бессмысленные анимации).


Порядок работы энтити (действий подконтрольного NPC):
  1. переместиться в позицию scripted_sequence, используя заданную анимацию движения и разворачиваясь в том же направлении, что и данная энтити. Если атрибут Move to Position равен None, пропустить этот пункт и перейти к п.2
  2. если подконтрольный NPC должен ждать других NPC для одновременного начала действий (см. выше), во время ожидания проигрывать анимацию, заданную атрибутом Pre Action Idle Animation, иначе пропустить этот пункт и перейти к п.3. В случае ожидания, если указанный атрибут не задан, будет проигрываться анимация ACT_IDLE.
  3. сгенерировать событие OnBeginSequence.
  4. выполнить анимацию, заданную атрибутом Action Animation. Если анимация не задана, пропустить данный пункт и перейти к п.5
  5. выполнить анимацию, заданную атрибутом Post Action Idle Animation. Если атрибут не задан, пропустить данный пункт и перейти к п.6. Если установлен флаг Loop in Post Idle, указанная анимация будет выполняться бесконечно, пока активна энтити (т.е. пока к ней не применена команда CancelSequence или Kill). Если флаг установлен, а атрибут не задан, будет проигрываться анимация ACT_IDLE.
  6. сгенерировать событие OnEndSequence.
  7. если задан атрибут Next Script, NPC начинает выполнять тот же порядок действий для следующей энтити scripted_sequence.

Замечание: некоторые анимации начинаются (или заканчиваются) с задержкой (около 1 сек), когда подконтрольный NPC должен подойти к scripted_sequence. Однако те же анимации выполняются без задержки, когда назначаются в Post Action Idle Animation. Если Вас не устраивает данная особенность энтити scripted_sequence, придется отказаться от ее использования в пользу logic_choreographed_scene и редактора Face Poser (в редакторе можно более тонко настроить анимацию NPC).

Замечание: возможны случаи, когда анимация NPC, заданная одним из атрибутов-анимацией, по какой-либо причине не выполняется. Если Вы уверены, что все сделали правильно, попробуйте задать те же значения для других атрибутов-анимаций (см. ниже атрибуты - имена анимаций).
Например, если не срабатывает Action Animation, попробуйте Post Action Idle Animation (см. также флаг Loop in Post Idle - играет ту же роль, что и атрибут Loop Action Animation? для атрибута-анимации Action Animation).



Атрибуты (Keyvalues)


Name
имя, используемое для ссылки на данный объект.
Parent <имя энтити>
имя родительской энтити (параметр Name), с которой данная энтити будет "связана". При этом движение, ориентация в пространстве и жизнь данной энтити (дочерней) будут зависеть от родительской энтити.
Pitch Yaw Roll (Y Z X) <pitch yaw roll>
ориентация энтити в пространстве (параметры означают соответствующие углы поворота вокруг осей Y, Z и X).

Обратите внимание: подконтрольный NPC будет разворачиваться в том же направлении. Кроме того, если направление следующей энтити scripted_sequence совпадает (или мало отличается) от направления текущей, подконтрольный NPC будет передвигаться к ней, не разворачиваясь (т.е. идти боковым шагом или пятиться назад) - при наличии соответствующей анимации.
Target NPC <список энтити>
имя подконтрольного NPC или класса NPC (например, npc_citizen).
Pre Action Idle Animation <строка>
имя анимации (например "idle01") или активности (например "ACT_IDLE"), проигрываемой до начала активизации энтити, если NPC вынужден ждать события OnBeginSequence (см. выше). Атрибут используется, если установлен флаг Start on Spawn, либо энтити дана управляющая команда MoveToPosition, либо подконтрольный NPC будет ожидать других (см. выше).
Entry Animation <строка>
имя анимации (например "reload02") или активности (например "ACT_RELOAD"), проигрываемой в начале активизации энтити, до перехода к основной анимации (см. ниже). Добавлено в Half-Life 2: Episode 1.
На данный момент условия выполнения этой анимации неизвестны. По-видимому, не работает.
Action Animation <строка>
имя основной анимации (например "reload02") или активности (например "ACT_RELOAD"). Если NPC должен выполнить только одну анимацию, она задается именно этим атрибутом.
Post Action Idle Animation <строка>
имя анимации (например "idle01") или активности (например "ACT_IDLE"), проигрываемой после основной анимации. Атрибут используется, если задать одинаковое имя нескольким scripted_sequence (см. выше про одновременное выполнение анимаций).
Custom Move Animation <строка>
используется совместно с установленным значением Custom movement атрибута Move to Position и определяет анимацию (например "crouch_run01") или активность (например "ACT_RUN"), которая будет использоваться во время передвижения подконтрольного NPC к энтити scripted_sequence.
Loop Action Animation? <список значений Yes/No>
определяет зацикливание основной анимации (см. выше). Добавлено в Half-Life 2: Episode 1.
По-видимому, не работает.
Synch Post Idles? <список значений Yes/No>
предположительно определяет одновременное завершение анимаций Post Action Idle Animation несколькими NPC и используется в сценах взаимодействия NPC (см. выше описание и порядок работы scripted_sequence). Добавлено в Half-Life 2: Episode 1.
По-видимому, не работает.
Search Radius (0=everywhere) <число с п.точкой>
радиус для поиска подконтрольных NPC (в основном используется, если атрибут Target NPC задает класс NPC). Значение 0 задает поиск NPC на всей карте.
Repeat Rate ms <число с п.точкой>
назначение неизвестно. На данный момент изменение параметра не оказывает видимого влияния на работу энтити.
Move to Position <список значений>
задает способ передвижения подконтрольного NPC к энтити scripted_sequence.
Принимаемые значения:

Значение Описание
0 Движения нет (выполнить анимацию, стоя на месте)
1 Идти шагом
2 Бежать
3 Движение задается отдельно (см. выше Custom Move Animation)
4 Переместиться мгновенно
5 Движения нет, только повернуться лицом к scripted_sequence
Next Script <список энтити>
имя следующей энтити scripted_sequence, которая будет активизирована сразу после окончания действия текущей. Между этими двумя энтити контроль над целевым NPC не утрачивается (т.е. NPC "не отвлекается" от выполнения действий).
Minimum DX Level <список>
минимальная версия DirectX на компьютере пользователя, при которой энтити будет работать.
Принимаемые значения:

Значение Описание
0 По-умолчанию (наименьшая версия)
70 Версия DirectX 7.0
Maximum DX Level <список>
максимальная версия DirectX на компьютере пользователя, при которой энтити будет работать.
Принимаемые значения:

Значение Описание
0 По-умолчанию (последняя версия)
60 Версия DirectX 6.0
On player death <список>
что происходит, если игрок погибает.
Принимаемые значения:

Значение Описание
Do Nothing энтити продолжает быть активной, NPC продолжает выполнять действия
Cancel Script and return to AI энтити перестает быть активной, NPC возвращается в нормальное состояние (в котором поведение определяет заданный для NPC искусственный интеллект)



Управляющие команды (Inputs)


Kill
удаляет энтити из игры.
KillHierarchy
удаляет энтити и все ее дочерние энтити из игры (связанные через Parent).
AddOutput <строка>
добавляет Input/Output-связку с другой энтити в формате:
<имя события> <имя цели>:<управляющая команда>:<параметр>:<задержка>:<максимальное число срабатываний (-1 == не ограничено)>
Данная команда является потенциально опасной, используйте ее аккуратно.
FireUser1…FireUser4
вызывает срабатывание соответствующих событий OnUser1…OnUser4 для данной энтити.
SetParent <строка>
изменяет родительскую энтити для данной.
SetParentAttachment <строка>
изменяет точку "привязки" данной энтити к родительской, если для родительской энтити задана модель с точками привязки (см. в редакторе Model Viewer).
Предварительно необходимо определить значение Parent для данной энтити (задав атрибут Parent в редакторе или командой SetParent в игре). Передаваемый параметр определяет тип привязки.
SetParentAttachmentMaintainOffset <строка>
команда аналогична предыдущей, за исключением того, что данная энтити будет поддерживать положение относительно родительской, бывшее на момент привязки.
ClearParent
убирает привязку данной энтити к родительской.
BeginSequence
заставляет подконтрольного NPC начать выполнение анимации.
MoveToPosition
заставляет подконтрольного NPC идти к позиции scripted_sequence. Во время передвижения NPC выполняет заданную анимацию (см. выше атрибут Move to Position), если анимация не задана - выполняется активность NPC ACT_IDLE. Анимация выполняется до начала основной анимации (событие OnBeginSequence).
CancelSequence
останавливает выполнение scripted_sequence (и анимации). Если команда дана после начала основной анимации, она игнорируется до тех пор, пока основная анимация не закончится (до события OnEndSequence).


События, происходящие с энтити (Outputs)


OnUser1…OnUser4
вызываются управляющими командами FireUser1…FireUser4, соответственно.
OnBeginSequence
происходит в начале выполнения основной анимации (Action Animation).
OnEndSequence
происходит в конце выполнения основной анимации.
OnScriptEvent01…OnScriptEvent08
происходят во время выполнения scripted_sequence, если случается событие 'trigger' anim. Используйте event 1003 framenum 1…8 в *.qc-файле (используется для компиляции модели). На данный момент более подробное описание отсутствует.


Флаги (Flags)


Repeatable
позволяет повторно использовать энтити командой BeginSequence или в замкнутом цикле (когда последняя scripted_sequence ссылается на данную).
По умолчанию scripted_sequence можно задействовать в игре только один раз.
Leave Corpse
назначение флага неизвестно. По-видимому, должен задавать исчезновение убитого NPC в игре.
Start on Spawn
энтити активизируется сразу после создания в игре. Если при этом задан атрибут Pre Action Idle Animation, подконтрольный NPC будет циклически выполнять указанную анимацию до момента подачи команды BeginSequence (удобно использовать, в частности, для спящих зомби, которые просыпаются при пересечении игроком триггера; именно так устроены префабы npc_zombie_prone и npc_zombie_slump).
No Interruptions
запрещает прерывание анимации подконтрольного NPC (вызванное, например, стрельбой по нему). Если флаг не установлен, scripted_sequence прекращает свое действие в случае "вмешательства" в ее выполнение.
Override AI
задает абсолютное подавление искусственного интеллекта подконтрольного NPC (в некоторых случаях без данного флага NPC "выходит из-под контроля").
No Script Movement
запрещает перемещение в пространстве подконтрольного NPC во время анимации (если оно задано в самой анимации).
Loop in Post Idle
анимация Post Action Idle Animation будет повторяться бесконечно (соответственно, активность энтити длится до тех пор, пока ей не будет дана команда сброса).
Priority Script
назначение флага неизвестно.



Статьи (рус):
Статьи (eng):

перейти к общему списку

Номер статьи: 11

Сборник полезной информации по созданию модификаций на движке Valve Source Engine (игры Half-Life 2, Episode One, Episode Two)