← Все материалы
Разработка

Восприятие NPC и память о цели

Разделяем состояние мира и знания персонажа: видимость, последнее наблюдение, забывание и понятная реакция.

Что нужно знать

Игровой код знает координаты всех объектов. 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 видит через стены.
  • Поиск идёт к текущей скрытой цели: память на деле всеведущая.
  • Состояние меняется без сигнала: игрок не понимает, обнаружен ли он.

Проверка результата

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

Задание для ИИ-агента

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

Для разбора используйте призмы «Машина состояний» и «Обратная связь».

Источники и дальнейшее чтение

CC BY 4.0 · Game Dev DB contributors