Скриптинг И.И.: Скрипты поведения

Материал из CryWiki Russia

Перейти к: навигация, поиск
Эта страница страница помечена как находящиеся в процессе перевода.
О статье
АвторAndreyFilantrop
СложностьСредняя
ТребованияТекстовый редактор, Crysis 2 Mod SDK.
Дата добавления07/03/12


Содержание

Скрипты поведения

Краткий обзор

Для того, чтобы ИИ реагировали на игрока и окружающую среду, они должны иметь назначенные поведения (behavior). Как эти поведения расположены и выбираются, рассматривается в руководстве «Дерево выбора поведения»; данное руководство будет рассматривать, как определить индивидуальное поведение, и как они интегрируются с ИИ системой. Скрипт Behavior содержит логику о том, как конкретный ИИ должен реагировать на стимулы в текущих событиях, такие стимулы, как обнаружение игрока, слышание звука, получение сигнала от члена группы, приземление гранаты к ногам. Все эти изменения окружающей среды переводятся в сигналы, обрабатываемые как методы таблицы поведений (behavior table). Таким образом, текущее поведение ИИ имеет полную власть над его ответами. Помимо просто реагирования на стимулы, поведение поддерживает состояние ответа на них ИИ. Поэтому, как только ИИ начинает однажды какое-то поведение (behavior), оно будет продолжать диктовать все ИИ действия до того момента, пока другое поведение behavior не будет выбрано.


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


Если ИИ не назначено действующее Дерево Выбора Поведения (Behavior Selection Tree или сокращенно BHS) по крайней мере с одним действующим поведением по умолчанию, то ИИ НЕ БУДЕТ иметь поведения вообще. Перцепция ИИ поступающих сигналов (т.е. обработка воспринимаемых самим ИИ сигналов) функционирует независимо и будет по прежнему посылать сигналы, но ЕДИНСТВЕННОЕ, что ИИ будет в состоянии сделать - это повернуться по направлению к текущей «Цели Внимания» («Attention Target»).


Создание поведения

ИИ являются назначенными поведениями через BHS. Дерево добавляется посредством Behavior Selection Tree свойства под полем ClassProperties ИИ архетипа в CryENGINE Sandbox. Хотя дерево ассоциирует поведения с ИИ, поведения должны определяться индивидуально.

Поведение определяется в таблице LUA в базовой директории игры под «Scripts/AI/Behaviors». При добавлении поведения или внесении изменений в существующее, перезагрузка скрипта в Sandbox перезагрузит его без необходимости повторного запуска редактора.

Как пример давайте создадим новое поведение называемое «Idle», которое наследует от другого поведения таблицы, называемого «AIBaseBehavior».

Таблица поведения начинается со следующего объявления:

local Behavior = CreateAIBehavior("Idle", "AIBaseBehavior",  
{  
  TABLE METHODS...  
}

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

Конструкторы

Все поведения ДОЛЖНЫ иметь Constructor метод и по желаю иметь Destructor метод. Constructor метод является критическим, т.к. он вызывается ВСЕМИ и ВСЕГДА, когда ИИ переключается на поведение. Он должен заботиться об инициализации любого статуса сущности и начинать ИИ действия, которые будут представляться во время работы поведения.

Например, наш idle конструктор поведения может выглядеть так:

Constructor = function (behavior, entity)  
  if ( entity:IsActive() ) then  
    entity:SelectPrimaryWeapon()  
  end  
end,

Деструкторы

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

Destructor = function(behavior, entity)  
  entity.lastIdlePosition = entity:GetPos()  
end,

Сигнал поддержки

Помимо этого, также возможно интегрировать поведение с сигналами ИИ системы. (иначе известными как события events). Примерами могут быть:

OnNoTarget = function( self, entity )  
  -- вызывается когда ИИ перестает видеть привлекающую внимание цель  
end,  
 
 
OnEnemySeen = function( self, entity, fDistance )  
  -- вызывается когда ИИ видит живого врага  
end,  
 
OnGrenadeSeen = function( self, entity, fDistance )  
  -- вызывается когда ИИ видит гранату  
end,

События/сигналы ИИ системы функционируют с аргументами. Имя функции, это имя события и список аргументов выглядит следующим образом:

1. self (сам) - Этот аргумент является ссылкой к самой таблице поведения. Это позволяет методу таблицы поведения вызывать другой метод поведения, т.к. он постоянно держит ссылку на себя.

Например:

ProcessVisual = function( self, entity, fDistance )  
end,  
 
OnEnemySeen = function( self, entity, fDistance )  
  -- вызывается когда ИИ видит живого врага  
  self:ProcessVisual(entity, fDistance)  
end,