ИИ врагов: 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 — память ИИ, связующая восприятие, решения и действия.