Поскольку трех игровых проектов недостаточно, чтобы удовлетворить моего внутреннего демона-креациониста, у меня были идеи для еще двух игр с ИИ. После нескольких неудачных запусков я взял себе Behavior Designer, прочитал о деревьях поведения и вот что я получил примерно за два часа работы.

Если вас интересуют деревья поведения или вы хотите узнать конкретно о Behavior Designer, приведенное ниже удовлетворит ваше любопытство и даже научит вас кое-чему о создании ИИ с помощью Unity и Behavior Designer.

Очевидно, эта графика-заполнитель никого не впечатляет. Итак, давайте разберем содержание того, что вы видите.

Настраивать

Базовая установка этой игры - это концепция защиты башни с изюминкой. Четыре небольших зеленых блока предназначены для обозначения ферм, фабрик или чего-то еще. Это ваши производители золота. Большой зеленый блок - это гауптвахта. Серые блоки - просто препятствия для проверки поиска пути. Красный диск - источник вражеских бандитов.

Бандиты

Бандиты тут действительно просты. Они просто хотят грабить.

Слева находится дерево поведения бандитов.

По сути, они бесконечно повторяют простую последовательность внизу.

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

Затем Seek заставляет бандита приближаться к ферме, используя встроенную навигационную сетку Unity, чтобы перемещаться по препятствиям, избегать других персонажей и т. Д.

Последний шаг - это ссылка на последовательность атаки, которую я подробно расскажу ниже.

Это хороший пример очень простого логического дерева. Обратите внимание, что из-за декораторов повторения и последовательности, когда последовательность атаки завершена (т. Е. Цель уничтожена), бандит вернется к блужданию и поиску следующей цели.

Все, что вы видите, как красные капсулы делают на видео выше, является результатом этого очень простого дерева.

Караула и охрана

У гауптвахты также есть дерево поведения, очень похожее на дерево бандитов выше.

Он также бесконечно повторяет простую последовательность: проверьте, видите ли вы бандита, если да, создайте охранника, затем подождите несколько секунд, прежде чем продолжить проверку.

Я мог бы легко написать это простое поведение в коде, но выполнение его в виде дерева позволяет легко расширить его в будущем.

Охранники - первая сущность с более сложным деревом поведения:

Давайте сначала подведем итоги того, что делает охранник: ищите врага, атакуйте его и всех других бандитов поблизости, а затем возвращайтесь на базу.

Он разделен на две ветви. Первое слева выполняет два действия параллельно, завершаясь всякий раз, когда одно из них завершается успешно.

Охранник получает цель поиска со сторожевого поста, обнаружившего врага, и движется к нему. При этом (параллельный селектор) он также проверяет, видит ли он каких-либо бандитов. Если это так, он меняет цель на бандита, которого заметил. Почему? Потому что охранник не должен пробегать мимо одного бандита, чтобы атаковать другого подальше.

Как только он найдет свою цель, он будет запускать последовательность, пока это не сработает. Единственное действие в последовательности, которое может вообще потерпеть неудачу, - это «Может видеть объект», поэтому вся эта последовательность продолжается до тех пор, пока охранник не перестанет видеть бандитов. Он делает очень просто: обнаруживает бандита, приближается к нему, атакует.

Когда охранник перестанет видеть бандитов, он вернется домой на сторожевой пост. По пути домой он проигнорирует дальнейших бандитов.

Последовательность атаки

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

Во-первых, вся эта последовательность повторяется до тех пор, пока не выйдет из строя, что возможно только в том случае, если цель ушла.

Проверки «Может видеть объект» нужны для того, чтобы убедиться, что все действия, требующие существования цели, выполнены и завершаются неудачно (и, таким образом, выходят из дерева), когда цель исчезла.

NPC поворачивается к цели каждый тик, чтобы быть уверенным, что даже когда цель движется, она не ускользнет из поля зрения так легко.

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

Следующая часть - это настоящая атака, которая на данный момент очень проста, она просто отправляет сообщение о повреждении цели. Затем все поведение приостанавливается на секунду или две, чтобы отвести оружие назад и т. Д.

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

Мне потребовалось несколько попыток начать работу с деревьями поведения, и лучше всего было иметь реальные примеры для подражания. Примеры CTF и RTS, включенные в Behavior Designer, очень помогли. Возможно, эта статья поможет кому-то еще начать работу.