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

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

(Различия между версиями)
Перейти к: навигация, поиск
Строка 54: Строка 54:
===Signal Variables:===
===Signal Variables:===
-
'''Signal Variables''' представляют возможность напрямую изменять переменные в '''ИИ''' '''BHS'''. Они приходят из ИИ системы и включают/выключают переменные объявленные в секции под названием «Переменные». Три параметра должны быть определены для каждой сигнальной переменной.
+
'''Signal Variables''' представляют возможность напрямую изменять переменные в '''ИИ''' '''BHS'''. Они приходят из ИИ системы и включают/выключают переменные объявленные в секции под названием «Переменные». Три параметра должны быть определены для каждой сигнальной переменной. Должны быть определены имя, которое подходит под имя ожидаемого сигнала из ИИ системы, имя '''selection variable''', которое должно быть изменено, значение, в которое устанавливается '''selection variable'''. 
 +
 
 +
Чтобы проиллюстрировать вышеизложенное, секция '''signal variable''' может выглядеть таким образом:
 +
 
 +
<source lang="lua">
 +
<SignalVariables>
 +
  <Signal name="OnHearSound" variable="AwareOfSound" value="true"/>
 +
  <Signal name="OnEnemySeen" variable="AwareOfEnemy" value="true"/>
 +
  <Signal name="OnNoTarget" variable="AwareOfSound" value="false"/>
 +
  <Signal name="OnNoTarget" variable="AwareOfEnemy" value="false"/>
 +
</SignalVariables>
 +
</source>
 +
 
 +
===Leaf Translations:===
 +
 
 +
Leaf Translations нужны для более ясного и более здравого определения дерева. Они обеспечивают перенесение общих имен поведений (которые обычно распределяются по ИИ) в архетип-специфические поведения. Это не является необходимым, если используется общедоступный (общий) BHS блок выбора, который будет обсуждаться в дальнейшем в данном документе. Хотя, они могут быть использованы, чтобы придать вашему дереву выбора более удобочитаемый облик.   
 +
 
 +
Чтобы проиллюстрировать вышеизложенное, секция '''leaf translations''' может выглядеть таким образом:
 +
 
 +
<source lang="lua">
 +
<LeafTranslations>
 +
  <Map node="Idle" target="GruntIdle"/>
 +
  <Map node="Investigate" target="GruntInvestigate"/>
 +
  <Map node="Attack" target="GruntAttack"/>
 +
</LeafTranslations>
 +
</source>
 +
 
 +
Как отмечено, эта секция не обязательна, но для целей этого примера она будет приниматься. Это меняет вид того, как будет далее по тексту выглядеть наше дерево выбора '''selection tree'''.
 +
 
 +
=== Selection tree ===
 +
 
 +
Эта секция использует 3 вышеописанные компонента, чтобы определить доступные поведения для ИИ, и определяет, как откорректировать выбранные каждый раз, когда дерево оценивается (читается) заново. В порядке предложения их по имени, поведения организованы в структуру дерева. Каждый узел дерева представляет группировку поведений и условий, необходимых чтобы позволить читать дочерние узлы. Каждый '''leaf''' узел представляет ссылку на специфическое поведение и условия «'''condition'''», необходимое, чтобы пройти к нему, чтобы соответственно быть выбранным.
 +
 
 +
Приоритет узлов определяется порядком в файле. Так, если два или более узлов будут подходить под текущее состояние '''selection variable''', то первый встреченный по списку расположения в дереве будет выбран.
 +
 
 +
Чтобы проиллюстрировать вышеизложенное, секция '''selection tree''' может выглядеть таким образом:   
 +
 
 +
<source lang="lua">
 +
<Priority name="Root">
 +
  <Priority name="Combat" condition="AwareOfEnemy">
 +
    <Leaf name="Attack"/>
 +
  </Priority>
 +
  <Leaf name="Investigate" condition="AwareOfSound"/>
 +
  <Leaf name="Idle"/>
 +
</Priority>
 +
</source>

Версия 10:04, 22 августа 2012

Эта страница страница помечена как находящиеся в процессе перевода с: 20 июля 2012.
Статью пометил сам автор статьи.


О статье
АвторAndreyFilantrop
СложностьСредняя
ТребованияТекстовый редактор, Crysis 2 Mod SDK.
Дата добавления20/07/12


Содержание

Дерево выбора поведения

Обзор

В то время как скрипты поведения представляют собой индивидуальную логическую обработку состояний в которых может находиться ИИ, по прежнему должна существовать возможность выбора между ними, чтобы выбрать правильное поведение в любой момент игры. Дерево выбора поведений (BHS) определяет набор правил, которые позволяют ИИ системе сохранять необходимое поведение ИИ всё время. Каждый ИИ-тип должен быть связан с BHS, и более чем один ИИ-тип может относиться к тому же BHS.

Давайте определим некий пример, на который в дальнейшем мы будем ссылаться в течение всей этой статьи. Скажем некий ИИ, которого мы назовем «Grunt», имеет 3 поведения: idle, alert, и attack. (перевод этих названий соответственно: в режиме ожидания - т.е. дефолтное поведение, встревоженный, боевое поведение). ИИ должен быть по определению в дефолтном поведении idle, когда он не получает внешних стимулов; в состоянии alert он должен находиться, года он слышит что-то неизвестное, и наконец в состояние attack он перейдет, когда он визуально может уже видеть врага. Обратно в состояние idle он может перейти через некоторое время, если он на его протяжении не получает обновляющихся слуховых/визуальных стимулов. Чтобы поддерживать такую систему, ИИ должен иметь Дерево Выбора Поведений или BHS, которое будет определять, какие условия ассоциируются с каким из поведений. Глобальная ИИ-система будет заботиться об обновлении ИИ перцепции (т.е. восприятии сигналов) и посылании сигналов событий, когда состояние перцепции ИИ меняется.

Диаграмма вышеуказанных поведений может выглядеть так:


-потом нарисую


Этот макет является ключом к функционированию ИИ в игре, т.к. он определяет все поведения, которые ИИ должен поддерживать в игре. Это, естественно, должно переводиться в BHS с набором для реализации подходящего поведения. Все BHS должны быть определены внутри папки «Game» в директории «Scripts/AI/SelectionTrees». Новое дерево, добавляемое в эту папку, будет автоматически проявлено в игре при перезагрузке ИИ или при перезагрузке игры. Чтобы связать BHS с конкретным архетипом ИИ, загрузите архетип в редакторе, и используйте выпадающее меню для BehaviorSelectionTree параметра под вкладкой Class Properties.

Дерево Выбора Поведений: концепция и анатомия

BHS концепция предполагает, что в любой момент времени ИИ будет иметь одно поведение соответствующее текущему состоянию. Так, когда ИИ слышит какой-то звук, он начинает исследовать его, а когда видит врага - атакует его. Обратите внимание, что BHS не содержит информации о том, как ИИ переходит между состояниями, но содержит - только о том, как выбрать правильно поведение для правильного момента. BHS определяется посредством XML скрипт-файла и должно быть пригодным для ИИ, чтобы он мог перейти в любое поведение. Если BHS недоступно, то ИИ может только поворачивать голову по направлению к цели, и «ai_debugdraw 1» будет показывать «No Behavior» в дебаге.

BHS XML файлы не содержат никакой скриптовой догики и являются чисто файлами данных, которые ИИ система рассматривает, когда решает, в каком поведении ИИ должен находиться в конкретный период времени. BHS также могут включать заменяемые блоки, позволяющие дизайнеру распределять базовое поведение между множеством ИИ.

Дерево Выбора Поведений содержит 4 компонента:

1) Selection Variables (Выбираемые переменные): Переменные используются для определения условий, которые выбирают между статусами в Дереве.

2) Signal Variables (Сигнальные переменные): Сигналы, как посылаемые ИИ системой, которые непосредственно изменяют состояние выбираемых переменных (см.пункт №1).

3) Leaf Translations (Листы трансляции): Список отображения от общих имен до архетип-специфических имен поведений.

4) The Selection Tree (Дерево выбора): структура дерева, которая определяет, какие поведения являются приоритетными и какие условия должны быть выполнены.

Selection Variables:

Selection variables объявлены в своем собственном ​​разделе под названием «Переменные». Каждая переменная является всего лишь именно декларацией, представляющей булево значение (т.е. логическое) true (правда) или false (ложь). Они могут быть включены/выключены извне как ИИ-системой, так и самими поведениями. Они являются концептуальными переключателями, которые необходимы чтобы выбирать текущее состояние поведения ИИ, использующего данное BHS. Кроме того, возможно передавать значение по умолчанию (хотя по умолчанию все значения установлены на положение «ложь»).

Чтобы проиллюстрировать вышеизложенное, секция selection variable может выглядеть таким образом:

<Variables>
  <Variable name="AwareOfSound" default="false"/>
  <Variable name="AwareOfEnemy"/>
</Variables>

Signal Variables:

Signal Variables представляют возможность напрямую изменять переменные в ИИ BHS. Они приходят из ИИ системы и включают/выключают переменные объявленные в секции под названием «Переменные». Три параметра должны быть определены для каждой сигнальной переменной. Должны быть определены имя, которое подходит под имя ожидаемого сигнала из ИИ системы, имя selection variable, которое должно быть изменено, значение, в которое устанавливается selection variable.

Чтобы проиллюстрировать вышеизложенное, секция signal variable может выглядеть таким образом:

<SignalVariables>
  <Signal name="OnHearSound" variable="AwareOfSound" value="true"/>
  <Signal name="OnEnemySeen" variable="AwareOfEnemy" value="true"/>
  <Signal name="OnNoTarget" variable="AwareOfSound" value="false"/>
  <Signal name="OnNoTarget" variable="AwareOfEnemy" value="false"/>
</SignalVariables>

Leaf Translations:

Leaf Translations нужны для более ясного и более здравого определения дерева. Они обеспечивают перенесение общих имен поведений (которые обычно распределяются по ИИ) в архетип-специфические поведения. Это не является необходимым, если используется общедоступный (общий) BHS блок выбора, который будет обсуждаться в дальнейшем в данном документе. Хотя, они могут быть использованы, чтобы придать вашему дереву выбора более удобочитаемый облик.

Чтобы проиллюстрировать вышеизложенное, секция leaf translations может выглядеть таким образом:

<LeafTranslations>
  <Map node="Idle" target="GruntIdle"/>
  <Map node="Investigate" target="GruntInvestigate"/>
  <Map node="Attack" target="GruntAttack"/>
</LeafTranslations>

Как отмечено, эта секция не обязательна, но для целей этого примера она будет приниматься. Это меняет вид того, как будет далее по тексту выглядеть наше дерево выбора selection tree.

Selection tree

Эта секция использует 3 вышеописанные компонента, чтобы определить доступные поведения для ИИ, и определяет, как откорректировать выбранные каждый раз, когда дерево оценивается (читается) заново. В порядке предложения их по имени, поведения организованы в структуру дерева. Каждый узел дерева представляет группировку поведений и условий, необходимых чтобы позволить читать дочерние узлы. Каждый leaf узел представляет ссылку на специфическое поведение и условия «condition», необходимое, чтобы пройти к нему, чтобы соответственно быть выбранным.

Приоритет узлов определяется порядком в файле. Так, если два или более узлов будут подходить под текущее состояние selection variable, то первый встреченный по списку расположения в дереве будет выбран.

Чтобы проиллюстрировать вышеизложенное, секция selection tree может выглядеть таким образом:

<Priority name="Root">
  <Priority name="Combat" condition="AwareOfEnemy">
    <Leaf name="Attack"/>
  </Priority>
  <Leaf name="Investigate" condition="AwareOfSound"/>
  <Leaf name="Idle"/>
</Priority>