ИИ в Unreal — пять компонентов, не одна система
Когда говорят «ИИ в Unreal», подразумевают пять разных компонентов, которые взаимодействуют по строгим правилам: AIController владеет pawn и запускает дерево; Behavior Tree — логика принятия решений; Blackboard — общая память; NavMesh — топология проходимой геометрии; AIPerception — чувства (зрение, слух). Каждый можно понять отдельно — но реальная ИИ-поведенческая логика возникает только в их связке.
Самая частая ошибка — писать поведение в Tick pawn'а: «каждый кадр поверни сюда, проверь это». Это в принципе не ИИ-стек Unreal. Канонический поток выглядит совсем иначе: контроллер запускает дерево → дерево читает Blackboard → дерево вызывает MoveTo или другую Task → NavMesh строит путь → AIPerception обновляет Blackboard. Tick пустой.
Вторая характерная путаница — между Behavior Tree (логика) и Blackboard (данные). Они не взаимозаменяемы: Blackboard хранит что знает ИИ, Behavior Tree решает что делать на основе этих знаний. Полная карта — в слоях ниже.
Карта темы
- Behavior Trees — Selector/Sequence/Decorator/Task, порядок обхода, цикличность, что инвалидирует ветку.
- Blackboard — типизированные ключи, per-instance, sync c BT, observed keys.
- AIController — отдельный actor, AutoPossessAI, Possess, как переживает смерть pawn.
- AIPerception — компонент, sight/hearing/damage,
AIPerceptionStimuliSourceна целях. - NavMesh —
NavMeshBoundsVolume, динамический rebuild, agent radius, NavLink. - MoveTo — Task, async, обновление цели, остановка при failure.
Частые ошибки и ловушки
| Ошибка | Последствие |
|---|---|
Прикрепить AIController как компонент к pawn | AIController — отдельный actor, не компонент |
Поставить AIPerceptionComponent на pawn | Должен быть на AIController |
| Считать Blackboard глобальным синглтоном | Per-instance — каждый pawn имеет свой |
Звать MoveTo без NavMeshBoundsVolume | Тихий no-op; путь не строится |
| Захардкодить координаты waypoint в BT | Должны жить в Blackboard как ключи |
| Изменить значение в Blackboard и ждать реакции BT | Нужен Observed Blackboard Key Decorator |
SetActorLocation вместо MoveTo для перемещения | Минует NavMesh; pawn клипает через стены |
Полагать, что AIController умрёт с pawn | Контроллер переживает pawn по умолчанию |
Перепутать Service (периодика) с Task (действие) | Service не двигает, Task не апдейтит данные |
Забыть AIPerceptionStimuliSource на цели | Pawn не воспринимается, даже в зоне видимости |
Значение для собеседований
ИИ — обязательная middle-тема для любого UE5-собеседования с упором на gameplay. Проверяется:
- Что Behavior Tree, Blackboard и AIController — разные компоненты с разной ответственностью.
- Что
AIController— отдельный actor, а не компонент pawn. - Зачем Blackboard per-instance.
- Как BT реагирует на изменение ключа (Decorator + Observed key).
- Почему
MoveToне работает без NavMesh. - Где живёт
AIPerceptionComponent(на контроллере) и зачемStimuliSource.
Типичный неверный ответ: «Я делаю ИИ через Tick на pawn — просто, и работает». Реальный ответ — это не ИИ-стек Unreal, это процедурный код в Tick. Стек состоит из связки BT + Blackboard + контроллер; всё остальное это обход штатной системы.