{"schemaVersion":1,"record":{"key":"lesson/npc-perception","type":"lesson","id":"npc-perception","lang":"ru","title":"Восприятие NPC и память о цели","summary":"Разделяем состояние мира и знания персонажа: видимость, последнее наблюдение, забывание и понятная реакция.","updatedAt":"2026-10-20","status":"active","url":"https://gamemechanics.pro/ru/lessons/npc-perception/","jsonUrl":"https://gamemechanics.pro/api/v1/knowledge/ru/lesson/npc-perception.json","markdownUrl":"https://gamemechanics.pro/content/knowledge/ru/lesson/npc-perception.md","aliases":[],"tags":["npc-ai","perception","state-machines"],"sourceIds":["source-52855da41e5f6f4d"],"sources":[{"id":"source-52855da41e5f6f4d","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","verifiedAt":null}],"sections":[{"id":"prerequisites","title":"Что нужно знать","body":"Игровой код знает координаты всех объектов. NPC не обязан знать их. В этом уроке ИИ означает алгоритм поведения персонажа, а не языковую модель."},{"id":"principle","title":"Принцип","body":"Отделите наблюдение от решения. Восприятие сообщает «цель видна» или «шум услышан», память хранит последнее известное место, поведение выбирает действие. Глава Мартина Уолша в Game AI Pro 2 разбирает восприятие и осведомлённость как игровые модели, для которых важны последовательность правил и обратная связь.\n\nНачните с [состояний и переходов](/ru/lessons/state-machines/). Затем явно определите, какие сведения доступны в каждом состоянии. Если NPC использует скрытые координаты игрока после потери видимости, это должно быть осознанным правилом игры, а не случайной утечкой данных.\n\n<span id=\"пример-наблюдательный-дрон\"></span>"},{"id":"example","title":"Практический пример","body":"### Наблюдательный дрон\n\nВ самостоятельной учебной модели дрон замечает игрока в секторе 90° на расстоянии до 8 м при свободном луче до контрольной точки цели. Одного радиуса недостаточно: стена блокирует наблюдение. Луч до одной точки тоже упрощает реальность и может давать странные результаты у края укрытия.\n\nПри видимости дрон обновляет последнее известное место. Потеряв игрока, он ищет в этом месте две секунды, затем возвращается к маршруту. Он не обновляет память сквозь стену.\n\nИллюстративный псевдокод, не код конкретного движка:\n\n```text\nvisible = within_range(target) and within_cone(target) and clear_ray(target)\nif visible:\n    memory.position = target.position\n    memory.expires_at = now + 2.0\n    state = tracking\nelse if now < memory.expires_at:\n    state = searching\n    search_position = memory.position\nelse:\n    state = patrol\n```\n\nПредполагается, что до первого наблюдения срок памяти уже истёк. Вариант хранит короткую память, но не моделирует накопление подозрения. Добавляйте его, только если это нужно игровому правилу."},{"id":"mistakes","title":"Частые ошибки","body":"- Дальность есть, проверки преграды нет: NPC видит через стены.\n- Поиск идёт к текущей скрытой цели: память на деле всеведущая.\n- Состояние меняется без сигнала: игрок не понимает, обнаружен ли он."},{"id":"checks","title":"Проверка результата","body":"- Покажите отладочный сектор, луч, состояние и точку памяти.\n- Проверьте цель впереди, позади, за стеной и на границе дальности.\n- После потери видимости переместите игрока и убедитесь, что точка памяти неподвижна.\n- При дискретном обновлении проверьте истечение памяти на первом тике после срока."},{"id":"agent-task","title":"Задание для ИИ-агента","body":"> Реализуй раздельные наблюдение, память и состояние дрона. Подготовь четыре сцены проверки и журнал причин перехода. Назови упрощения луча и частоты обновления. Визуально обозначь поиск, не используя только цвет.\n\nДля разбора используйте призмы [«Машина состояний»](/ru/lenses/#schell-028) и [«Обратная связь»](/ru/lenses/#schell-063)."}],"relations":[{"type":"requires","direction":"outgoing","label":"Перед началом","key":"lesson/state-machines","title":"Состояния и переходы","url":"https://gamemechanics.pro/ru/lessons/state-machines/","jsonUrl":"https://gamemechanics.pro/api/v1/knowledge/ru/lesson/state-machines.json","markdownUrl":"https://gamemechanics.pro/content/knowledge/ru/lesson/state-machines.md"},{"type":"requires","direction":"incoming","label":"Продолжить изучение","key":"lesson/npc-action-selection","title":"Как NPC выбирает действие","url":"https://gamemechanics.pro/ru/lessons/npc-action-selection/","jsonUrl":"https://gamemechanics.pro/api/v1/knowledge/ru/lesson/npc-action-selection.json","markdownUrl":"https://gamemechanics.pro/content/knowledge/ru/lesson/npc-action-selection.md"},{"type":"explains","direction":"outgoing","label":"Применение принципа","key":"mechanic/boss-fight-atlas--boss-cover-line-of-sight","title":"Укрытие и линия видимости","url":"https://gamemechanics.pro/ru/knowledge/mechanic/boss-fight-atlas--boss-cover-line-of-sight/","jsonUrl":"https://gamemechanics.pro/api/v1/knowledge/ru/mechanic/boss-fight-atlas--boss-cover-line-of-sight.json","markdownUrl":"https://gamemechanics.pro/content/knowledge/ru/mechanic/boss-fight-atlas--boss-cover-line-of-sight.md"},{"type":"explains","direction":"outgoing","label":"Применение принципа","key":"mechanic/voice-audio--family-22","title":"Скрытность, приманки и контроль шума","url":"https://gamemechanics.pro/ru/knowledge/mechanic/voice-audio--family-22/","jsonUrl":"https://gamemechanics.pro/api/v1/knowledge/ru/mechanic/voice-audio--family-22.json","markdownUrl":"https://gamemechanics.pro/content/knowledge/ru/mechanic/voice-audio--family-22.md"},{"type":"practices","direction":"outgoing","label":"Применить на практике","key":"practice/maintenance-patrol","title":"Ремонтный патруль","url":"https://gamemechanics.pro/ru/knowledge/practice/maintenance-patrol/","jsonUrl":"https://gamemechanics.pro/api/v1/knowledge/ru/practice/maintenance-patrol.json","markdownUrl":"https://gamemechanics.pro/content/knowledge/ru/practice/maintenance-patrol.md"},{"type":"related","direction":"outgoing","label":"Связанные материалы","key":"lesson/state-machines","title":"Состояния и переходы","url":"https://gamemechanics.pro/ru/lessons/state-machines/","jsonUrl":"https://gamemechanics.pro/api/v1/knowledge/ru/lesson/state-machines.json","markdownUrl":"https://gamemechanics.pro/content/knowledge/ru/lesson/state-machines.md"},{"type":"reviews","direction":"outgoing","label":"Проверить через призму","key":"lens/schell-028","title":"Машина состояний","url":"https://gamemechanics.pro/ru/knowledge/lens/schell-028/","jsonUrl":"https://gamemechanics.pro/api/v1/knowledge/ru/lens/schell-028.json","markdownUrl":"https://gamemechanics.pro/content/knowledge/ru/lens/schell-028.md"},{"type":"reviews","direction":"outgoing","label":"Проверить через призму","key":"lens/schell-063","title":"Обратная связь","url":"https://gamemechanics.pro/ru/knowledge/lens/schell-063/","jsonUrl":"https://gamemechanics.pro/api/v1/knowledge/ru/lens/schell-063.json","markdownUrl":"https://gamemechanics.pro/content/knowledge/ru/lens/schell-063.md"},{"type":"contains","direction":"incoming","label":"Учебные маршруты","key":"path/npc-behavior","title":"Поведение NPC","url":"https://gamemechanics.pro/ru/learn/npc-behavior/","jsonUrl":"https://gamemechanics.pro/api/v1/knowledge/ru/path/npc-behavior.json","markdownUrl":"https://gamemechanics.pro/content/knowledge/ru/path/npc-behavior.md"}],"placements":[],"supersededBy":[],"attributes":{"category":"engineering","level":"intermediate","minutes":6},"endsAt":null,"provenance":"Авторский материал gamemechanics.pro. Учебные примеры требуют проверки в своём проекте.","license":"CC-BY-4.0","codeLicense":"MIT","attribution":"gamemechanics.pro contributors"}}