---
id: npc-perception
lang: ru
title: Восприятие NPC и память о цели
description: >-
  Разделяем состояние мира и знания персонажа: видимость, последнее наблюдение,
  забывание и понятная реакция.
category: engineering
level: intermediate
minutes: 6
updatedAt: '2026-10-20'
tags:
  - npc-ai
  - perception
  - state-machines
sources:
  - title: 'Martin Walsh: Modeling Perception and Awareness in Splinter Cell Blacklist'
    url: >-
      https://www.gameaipro.com/GameAIPro2/GameAIPro2_Chapter28_Modeling_Perception_and_Awareness_in_Tom_Clancy%27s_Splinter_Cell_Blacklist.pdf
url: 'https://gamemechanics.pro/ru/lessons/npc-perception/'
markdownUrl: 'https://gamemechanics.pro/content/ru/npc-perception.md'
license: CC-BY-4.0
codeLicense: MIT
attribution: gamemechanics.pro contributors
---

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

Игровой код знает координаты всех объектов. NPC не обязан знать их. В этом уроке ИИ означает алгоритм поведения персонажа, а не языковую модель.

## Принцип

Отделите наблюдение от решения. Восприятие сообщает «цель видна» или «шум услышан», память хранит последнее известное место, поведение выбирает действие. Глава Мартина Уолша в Game AI Pro 2 разбирает восприятие и осведомлённость как игровые модели, для которых важны последовательность правил и обратная связь.

Начните с [состояний и переходов](/ru/lessons/state-machines/). Затем явно определите, какие сведения доступны в каждом состоянии. Если NPC использует скрытые координаты игрока после потери видимости, это должно быть осознанным правилом игры, а не случайной утечкой данных.

<span id="пример-наблюдательный-дрон"></span>

## Практический пример

### Наблюдательный дрон

В самостоятельной учебной модели дрон замечает игрока в секторе 90° на расстоянии до 8 м при свободном луче до контрольной точки цели. Одного радиуса недостаточно: стена блокирует наблюдение. Луч до одной точки тоже упрощает реальность и может давать странные результаты у края укрытия.

При видимости дрон обновляет последнее известное место. Потеряв игрока, он ищет в этом месте две секунды, затем возвращается к маршруту. Он не обновляет память сквозь стену.

Иллюстративный псевдокод, не код конкретного движка:

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

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

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

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

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

Для разбора используйте призмы [«Машина состояний»](/ru/lenses/#schell-028) и [«Обратная связь»](/ru/lenses/#schell-063).
