ScriptedSequence
ScriptedSequences предназначены для управления Pawn (живыми существами) в скриптовых сценках. У актера ScriptedSequence в разделе AIScript находится динамический массив Действий (Actions).
Использование динамического массива
Изначально, массив действий пуст. Для того, чтобы добавить новое действие в массив, нажмите кнопку Add. При этом будет создан пустой элемент массива (кнопка Add всегда добавляет элементы в конец массива). Если, в любой момент, Вы нажмете кнопку Empty, весь массив будет очищен и все его элементы удалены.
Когда Вы добавили пустой элемент, Вы можете зайти в него и открыть выпадающее меню, в котором указаны все доступные типы действий. Для того, чтобы заполнить пустой элемент, выберите необходимое действие и нажмите кнопку New. После того, как выбранное Вами действие будет добавлено в ячейку массива, можно перейти в его свойства.
Для того, чтобы очистить какой-либо элемент массива, выделите его заголовок (там, где написан номер его ячейки, например [1]) и нажмите кнопку Clear. Таким образом, элемент останется, но все его содержимое будет удалено. Если же Вы нажмете Delete, то элемент будет удален полностью. Для того, чтобы вставить в середину массива новый элемент, воспользуйтесь кнопкой Insert. Обратите внимание на то, что кнопка Insert вставляет новый элемент перед текущей ячейкой, а не после.
Если Вы хотите изменить содержимое определенной ячейки, Вы должны, сперва, очистить ее, а затем создать новое содержимое.
Использование ScriptedSequence
Для того, чтобы привязать Pawn к массиву, необходимо открыть свойства Pawn и указать в поле AIScriptTag имя (Tag) ScriptedSequence актера. Таким образом, активация ScriptedSequence актера произойдет сразу же после "рождения" (spawn) Pawn (обычно это происходит при старте уровня). По этой причине, первой командой в массиве ScriptedSequence действий зачастую выступает WaitForEvent. При установке WaitForEvent действия, актер будет ожидать внешнего события для запуска остальной части своих действий.
Действия, которые используются в ScriptedSequence массивах, представляют собой определенные скриптовые команды. Ниже, более или менее подробно, описано каждое действие, что оно делает и для чего предназначено, а также как оно влияет на Pawn, который контролирует текущий скрипт. Обратите внимание на то, что вследствие специфики некоторых действий, не все типы можно использовать в ScriptedTrigger актере. Такие действия специально помечены в колонке Trigger. В таблице, также, отмечены так называемые латентные действия. Латентные, в отличие от обычных действий, прерывают общий ход скрипта до тех пор, пока текущее действие не прекратит свою работу.
Тип действия | Описание | Latent | Trigger |
ChangeWeapon | заставляет ScriptedController Pawn переключить текущее оружие на оружие указанное в поле NewWeapon; | нет | да |
ChangeTeam | изменяет текущую команду Pawn на команду, указанную в поле Team; | нет | да |
Crouch | заставляет Pawn присесть; | нет | нет |
DamageInstigator | наносит контролируемому Pawn повреждение. Величина урона указывается в поле Damage, а тип наносимого повреждения - в поле DamageType; | нет | да |
DestroyPawn | это действие уничтожит как Pawn, так и соответствующего ему ScriptedController. Без ScriptedController или Pawn, действия не будут работать; | нет | нет |
FinishRotation | если у Pawn есть цель, но он не развернут в ее направлении, этот тип действия будет ждать, пока Pawn не закончит разворачиваться; | да | да |
FireWeapon | этот тип действия заставляет Pawn начать стрельбу. Если, при этом, у Pawn нет оружия, это действие работать не будет. Если для переменной bPressFire указано значение true, то Pawn воспользуется первым (primary) типом стрельбы, если же bPressAltFire равен true - при стрельбе будет использован второй тип (secondary). В ситуациях, когда будет активирована primary стрельба и у игрока находится в руках мяч (используется в BombingRun играх), он выкинет его на расстояние 1500 юнитов перед собой; | нет | да |
ForceMoveToPoint | мгновенно перемещает Pawn к актеру, имя (Tag) которого указывается в поле DestinationTag. Если актера с таким именем не существует на уровне, то Pawn мгновенно переместится в точку, куда он в это время направлялся. Если поле DestinationTag оставить пустым, то в качестве конечной цели будет использован сам актер ScriptedSequence; | нет | да |
Freeze | делает полную остановку Pawn, "замораживая" его посредине анимации и движения; | да | да |
FreezeOnAnimEnd | этот тип действия подождет, пока Pawn завершит текущую анимацию и только затем остановит его; | нет | да |
Jump | заставляет игрока произвести прыжок. Тип прыжка указывается в поле JumpAction:
|
нет | да |
KillInstigator | убивает Pawn наповал, используя, при этом, тип повреждения, указанный в поле DamageType; | нет | да |
LocalizedMessage | выводит на экран LocalMessage сообщение, тип которого указывается в поле MessageClass. Номер сообщения, соответственно, указывается в поле MessageNum; | нет | да |
MoveToPlayer | этот тип действия заставляет контролируемого Pawn переместиться к игроку, ответственному за запуск ScriptedSequence; | да | нет |
MoveToPoint | делает то же самое, что и MoveToPlayer, но при этом Pawn будет перемещаться к актеру, имя (Tag) которого указано в поле DestinationTag. Если это поле пусто или актера с указанным именем не существует, то Pawn будет перемещен в точку расположения ScriptedSequence актера; | да | нет |
PlayAnim | заставляет Pawn проиграть определенную анимацию. Имя анимации указывается в поле BaseAnim. Переменная BlendInTime отвечает за время перехода от текущей анимации к указанной. BlendOutTime на данный момент не используется. Свойство AnimIterations определяет, сколько раз будет проигрываться анимация. Для того, чтобы анимация не прекращалась, установите для переменной bLoopAnim значение равное true. При помощи переменной StartFrame можно указать стартовый кадр анимации. За скорость анимации отвечает поле AnimRate; | нет | нет |
Run | это действие указывает контролируемому Pawn, что ему необходимо будет бежать при следующем перемещении. Визуально, это действие на Pawn никак не влияет; | нет | нет |
SetAlertness | указывает Pawn как реагировать на врагов:
|
нет | нет |
SetHidden | делает актера, имя (Tag) которого указано в поле HideActorTag невидимым (установите bHidden равным true) или, наоборот, видимым (установите bHidden равным false). Если поле HideActorTag пусто, то в качестве актера используется контролируемый Pawn; | нет | да |
SetPhysics | указывает Pawn как следует реагировать и двигаться. Это позволяет переключить физику Pawn на любую доступную, но, тем не менее, из-за того, что почти каждый тип физики требует тонкой настройки, не все типы следует использовать:
|
нет | да |
SetViewTarget | говорит Pawn обрести цель в виде указанного в поле ViewTargetTag актера. Если в поле ViewTargetTag указано 'enemy' в качестве цели будет выбран текущий враг Pawn-а. Если поле ViewTargetTag пусто или актера, указанного в этом поле не существует, то назначенная ранее цель будет отключена (т.е. равна None); | нет | нет |
ShootTarget | говорит Pawn стрельнуть в актера, назначенного действием SetViewTarget. Тип стрельбы зависит от текущего оружия. NumShots поле отвечает за количество выстрелов. Информация для скриптеров: за конечную стрельбу отвечает функция BotFire() в классе Weapon; | нет | да |
StopAnimation | останавливает текущую анимацию Pawn; | нет | нет |
StopShooting | если Pawn в данный момент стреляет, то этот тип действия остановит стрельбу. Очень удобно использовать в ситуациях, когда Вы хотите, чтобы Pawn стрелял до тех пор, пока не будет возбуждено определенное событие; | нет | да |
TeleportToPoint | мгновенно перемещает Pawn в место расположения актера, имя (Tag) которого указано в поле DestinationTag. Если поле DestinationTag оставить пустым, то в качестве конечной цели будет выбран сам актер ScriptedSequence. Если для переменной bPlaySpawnEffect будет указано значение равное true, будет, также, отображена анимация телепорт эффекта. Единственное отличие этого типа действия от ForceMoveToPoint заключается в том, что в случае отсутствия контролируемого Pawn, перемещен будет игрок; | нет | да |
ThrowWeapon | заставляет Pawn выкинуть текущее оружие. Скорость оружия, при этом, определяется значением переменной WeaponVelocity. Если WeaponVelocity установлен равным (0, 0, 0), то оружие будет иметь исходную скорость равную скорости игрока, плюс 250 по вертикали и плюс 300 по направлению движения Pawn. Если при этом контролируемого Pawn не существует или у Pawn нет оружия, это действие просто не будет работать; | нет | да |
TurnTowardPlayer | заставляет Pawn развернуться в сторону игрока, ответственного за ScriptedSequence; | нет | нет |
Walk | это действие указывает контролируемому Pawn, что ему необходимо будет идти при следующем перемещении. Визуально, это действие на Pawn никак не влияет; | нет | нет |
Действия скриптового характера
Тип действия | Описание | Latent | Trigger |
ChangeLevel | загружает новый уровень (указывается в поле URL). bShowLoadingMessage отвечает за появление надписи 'LOADING' при загрузке; | нет | да |
ChangeScript | находит и запускает скрипт, указанный в поле NextScriptTag. Если скрипт, указанный в поле NextScriptTag не найден, игра вылетит с ошибкой; | нет | нет |
EndSection | этот тип действия используется в совокупности с IfCondition и IfRandomPct. Если одно из этих действий "решит", что следующее действие запускать не нужно, то выполнение скрипта переходит к первому, попавшемуся в последующей части списка EndSection действию; | нет | да |
GotoAction | перекидывает выполнение скрипта к действию, номер которого определяется переменной ActionNumber. Если для номера действия указать отрицательное значение, скрипт перейдет к самому первому действию (т.е. к действию под номером 0); | нет | да |
IfCondition | если TriggeredCondition соответствующий имени, указанному в поле TriggeredConditionTag активирован (т.е. для него переменная bEnabled возвращает значение true), то скрипт нормально будет продолжать свое выполнение. Если же это значение равно false, скрипт перейдет к очередному EndSection действию, пропустив, при этом, все промежуточные; | нет | да |
IfRandomPct | значение, указанное в поле Probability отвечает за вероятность того, что последующие действия текущей секции будут пропущены. Во время выполнения скрипта, генерируется случайное число в диапазоне от 0 до 1. Если это число меньше чем значение переменной Probability, то скрипт будет нормально продолжать свое выполнение. В противном случае скрипт перейдет к очередному EndSection действию, пропустив, при этом, все промежуточные; | нет | да |
LeaveSequence | прекратит выполнение данного ScriptedSequence; | нет | да |
WaitForAnimEnd | скрипт будет ожидать окончания текущей анимации. В поле Channel указывается необходимый канал анимации. Чаще всего используется 0 канал, который является основным каналом; | да | нет |
WaitForEvent | действие будет ожидать возбуждения события, указанного в поле ExternalEvent. Если, при этом, TriggerdeCondition соответствующий имени (Tag) указанном в поле ExternalEvent был уже активирован, действие работать не будет; | да | да |
WaitForPlayer | скрипт будет ожидать, пока игрок не приблизиться к Pawn на расстояние, указанное в поле Distance; | да | нет |
WaitForTimer | выполнение скрипта прекратится на время, определяемое переменной PauseTime; | да | да |
Tyoma '32_Pistoleta'
www.unrealscript.ru