Что нужно знать
Игровой код знает координаты всех объектов. NPC не обязан знать их. В этом уроке ИИ означает алгоритм поведения персонажа, а не языковую модель.
Принцип
Отделите наблюдение от решения. Восприятие сообщает «цель видна» или «шум услышан», память хранит последнее известное место, поведение выбирает действие. Глава Мартина Уолша в Game AI Pro 2 разбирает восприятие и осведомлённость как игровые модели, для которых важны последовательность правил и обратная связь.
Начните с состояний и переходов. Затем явно определите, какие сведения доступны в каждом состоянии. Если NPC использует скрытые координаты игрока после потери видимости, это должно быть осознанным правилом игры, а не случайной утечкой данных.
Практический пример
Наблюдательный дрон
В самостоятельной учебной модели дрон замечает игрока в секторе 90° на расстоянии до 8 м при свободном луче до контрольной точки цели. Одного радиуса недостаточно: стена блокирует наблюдение. Луч до одной точки тоже упрощает реальность и может давать странные результаты у края укрытия.
При видимости дрон обновляет последнее известное место. Потеряв игрока, он ищет в этом месте две секунды, затем возвращается к маршруту. Он не обновляет память сквозь стену.
Иллюстративный псевдокод, не код конкретного движка:
visible = within_range(target) and within_cone(target) and clear_ray(target)
if visible:
memory.position = target.position
memory.expires_at = now + 2.0
state = tracking
else if now < memory.expires_at:
state = searching
search_position = memory.position
else:
state = patrol
Предполагается, что до первого наблюдения срок памяти уже истёк. Вариант хранит короткую память, но не моделирует накопление подозрения. Добавляйте его, только если это нужно игровому правилу.
Частые ошибки
- Дальность есть, проверки преграды нет: NPC видит через стены.
- Поиск идёт к текущей скрытой цели: память на деле всеведущая.
- Состояние меняется без сигнала: игрок не понимает, обнаружен ли он.
Проверка результата
- Покажите отладочный сектор, луч, состояние и точку памяти.
- Проверьте цель впереди, позади, за стеной и на границе дальности.
- После потери видимости переместите игрока и убедитесь, что точка памяти неподвижна.
- При дискретном обновлении проверьте истечение памяти на первом тике после срока.
Задание для ИИ-агента
Реализуй раздельные наблюдение, память и состояние дрона. Подготовь четыре сцены проверки и журнал причин перехода. Назови упрощения луча и частоты обновления. Визуально обозначь поиск, не используя только цвет.
Для разбора используйте призмы «Машина состояний» и «Обратная связь».