ИИ врагов: Behavior Tree и NavMesh

Обзорный урок про то, как в Unreal делают ИИ противников: навигация, дерево поведения и память.

Behavior Tree — это визуальная структура, описывающая поведение ИИ как дерево задач и условий, выполняемых в определённом порядке.

Из чего складывается ИИ

Враг, который патрулирует, замечает игрока и преследует его, состоит из нескольких частей. AIController — это «мозг» (помните разделение Controller и Pawn?), он управляет телом врага. Behavior Tree описывает, как враг принимает решения. NavMesh говорит, где можно ходить. Blackboard — это память ИИ.

NavMesh — карта проходимости

Чтобы враг шёл к цели в обход стен, движку нужна карта проходимых зон. Её строит Navigation Mesh (NavMesh): вы ставите на уровень том NavMeshBoundsVolume, и Unreal автоматически вычисляет, по каким поверхностям можно ходить. После этого команда «иди к точке» сама находит маршрут в обход препятствий.

Behavior Tree и Blackboard

Behavior Tree читается сверху вниз и слева направо. Его узлы бывают разных типов.

УзелРоль
SelectorПробует ветки по очереди, пока одна не сработает (логическое ИЛИ)
SequenceВыполняет ветки по порядку, пока все успешны (логическое И)
TaskКонкретное действие: идти, ждать, атаковать
DecoratorУсловие на ветке: выполнять, только если...
[Selector]
   |-- [Sequence: Видит игрока?]
   |       |-- Decorator: HasTarget == true
   |       |-- Task: MoveTo(игрок)
   |       |-- Task: Attack
   |-- [Sequence: Патруль]
           |-- Task: MoveTo(точка патруля)
           |-- Task: Wait(2 сек)

Blackboard — это набор именованных ячеек памяти ИИ (например, TargetActor, LastKnownLocation). Дерево читает и пишет их, а Decorator'ы проверяют условия по этим ячейкам.

Восприятие

Чтобы враг «видел» и «слышал» игрока, используют компонент AI Perception. Он сообщает, когда цель попала в поле зрения или раздался шум, и обычно записывает обнаруженную цель в Blackboard, после чего дерево переключается на преследование.

Как работает под капотом

Каждый цикл Behavior Tree обходит дерево от корня, проверяя Decorator'ы и выполняя задачи. Задача MoveTo обращается к навигационной системе, которая по NavMesh строит путь алгоритмом поиска кратчайшего пути и ведёт врага по точкам маршрута. Blackboard служит общей памятью, связывающей восприятие, решения и действия в единое поведение.

Частые ошибки

  • Забыть NavMesh. Без NavMeshBoundsVolume команды MoveTo не работают — враг стоит на месте.
  • Путать Selector и Sequence. Selector — «или», Sequence — «и»; перепутав, получите неверное поведение.
  • Логика без Blackboard. Хранить состояние ИИ нужно в Blackboard, а не в разрозненных переменных.

Services и EQS

Помимо узлов задач и декораторов, Behavior Tree использует Services — узлы, которые с заданной частотой обновляют данные в Blackboard, пока активна их ветка. Типичный сервис каждые полсекунды проверяет, видит ли враг игрока, и обновляет ячейку памяти. Это эффективнее, чем проверять каждый кадр, и держит «органы чувств» ИИ в актуальном состоянии без лишней нагрузки.

Для умного выбора позиций существует EQS (Environment Query System) — система запросов к окружению. Она отвечает на вопросы вроде «где встать, чтобы видеть игрока, но быть в укрытии?» или «какая точка вокруг цели лучше для атаки?». EQS перебирает кандидатные точки, оценивает каждую по заданным критериям и возвращает лучшую. С её помощью враги начинают вести себя тактически — заходить с флангов, прятаться за укрытиями, — а не тупо бежать напролом, что заметно оживляет бой.

Итоги

  • ИИ строится из AIController, Behavior Tree, Blackboard и NavMesh.
  • NavMesh задаёт проходимые зоны для поиска пути.
  • Selector — «или», Sequence — «и»; Task — действие, Decorator — условие.
  • Blackboard — память ИИ, связующая восприятие, решения и действия.
Проверьте себя
1. Зачем нужен NavMesh?
AДля освещения
BЧтобы задать проходимые зоны и искать путь в обход препятствий
CДля звука
DДля интерфейса
2. Чем Selector отличается от Sequence в Behavior Tree?
AНичем
BSelector — логическое ИЛИ (пробует до первого успеха), Sequence — И (все по порядку)
CSelector медленнее
DSequence только для звука
3. Что такое Blackboard?
AРедактор материалов
BПамять ИИ из именованных ячеек данных
CТип света
DМеню игры