Тебе наверняка встречались странности компьютерных противников. Бот может мгновенно заметить игрока, а через минуту застрять в углу и ходить по кругу. Иногда он идеально попадает в цель, а иногда не реагирует на противника, который стоит прямо перед ним.
Разберёмся, как бот получает информацию об игровом мире, принимает решения, ищет путь к цели и почему иногда ведёт себя совсем неразумно.
Как боты видят мир вокруг себя
Прежде чем действовать, NPC получает информацию об окружающей обстановке. Система может определять, где находится игрок, есть ли поблизости противники и раздался ли выстрел.
Зрение и слух NPC
Один из вариантов — задать персонажу область, в которой он может обнаружить игрока. Например, система способна учитывать расстояние до цели, угол обзора и наличие препятствия между персонажами.
Слух работает по другому принципу. Выстрел, взрыв или другой звук создаёт игровое событие, на которое NPC должен отреагировать. При этом персонаж не получает точное положение игрока: система может передать информацию об источнике или направлении звука, после чего NPC отправится проверять эту область.
Полученные данные используются в логике поведения. Например:
- игрок обнаружен — начать преследование;
- игрок исчез из поля зрения — проверить последнее известное место;
- здоровье стало низким — искать укрытие;
- рядом раздался выстрел — проверить источник звука.
В более сложных системах поведения NPC может учитывать расстояние до цели, количество противников, состояние персонажа, доступные укрытия и другие условия.
Почему боты иногда видят сквозь стены
Игроку может показаться, что NPC видит сквозь стену, когда противник реагирует на его положение, хотя физически не должен его обнаруживать. Причин может быть несколько.
Например, система восприятия может использовать упрощённую проверку видимости. Кроме того, информация о положении игрока может поступать в логику NPC из других игровых систем. Разработчики также могут специально менять параметры обнаружения в зависимости от уровня сложности.
На высокой сложности у NPC могут быть большая дальность обнаружения, меньшее время реакции или более высокая точность стрельбы. Это не означает, что для него создали более сложный алгоритм.
Как NPC принимают решения
Получив информацию об окружении, бот выбирает следующее действие. Для этого разработчики используют разные архитектуры игрового ИИ. Одни подходят для относительно простой логики, другие позволяют создавать более сложные комбинации поведения.
Конечный автомат: переключение между режимами
У персонажа есть несколько состояний:
- патрулирование,
- поиск игрока,
- преследование,
- атака,
- отступление.
В каждый момент он находится в определённом состоянии, когда выполняется заданное условие, происходит переход в другое. Например, персонаж заметил игрока — начал его преследовать. Потерял цель — отправился её искать. Получил много урона — отступил.
Преимущество такого подхода — простота. Разработчику легко понять, почему персонаж сделал то или иное действие, а ошибки проще находить и исправлять. Но чем больше состояний и переходов, тем сложнее поддерживать такую структуру.
Из-за этого игрок иногда может найти уязвимость в поведении противника: несколько раз повторить одну тактику и получить примерно одинаковую реакцию.
Дерево поведения: выбор из нескольких вариантов
Дерево поведения, или Behavior Tree, позволяет описывать действия NPC в виде иерархии.
Например, верхний уровень может выглядеть так:
- если рядом враг — атаковать;
- если врага не видно — проверить последнее известное место;
- если ничего не произошло — продолжить патрулирование.
Внутри каждой ветки находятся дополнительные условия и действия. Поэтому логику можно постепенно усложнять, не превращая её в длинную последовательность отдельных правил.
Дерево поведения также позволяет задавать приоритеты. Если персонаж одновременно обнаружил врага и услышал подозрительный звук, структура дерева определяет, какую задачу он будет выполнять первой.
GOAP и Utility: когда вариантов становится больше
В некоторых играх используют подходы, которые позволяют NPC выбирать действия с учётом текущей ситуации. GOAP, или Goal-Oriented Action Planning (целенаправленное планирование действий), строит последовательность действий для достижения цели. Например, если персонажу нужно атаковать игрока, но оружия нет, план может включать поиск оружия, перемещение в подходящую позицию и атаку. Если один вариант недоступен, система может построить другой план — если в игре предусмотрены альтернативные действия и условия для них.
Utility-системы оценивают доступные действия по числовой полезности. Например, при высоком запасе здоровья атака может получить больший балл, а при низком — лучше найти укрытие.
На практике эти подходы могут сочетаться. Например, дерево поведения может определять общую структуру того, как будет действовать NPC, а отдельные узлы — использовать Utility-систему или планирование для выбора манёвра.
Как боты находят путь по карте
NPC нужно ещё добраться до игрока, прежде чем атаковать его. Для навигации разработчики описывают проходимые области карты и используют алгоритмы поиска пути.
Навигационная сетка и поиск пути
Один из распространённых подходов — NavMesh, или навигационная сетка. Она описывает проходимые области уровня и помогает системе строить маршрут между точками.
По навигационной сетке алгоритм поиска пути может строить маршрут с учётом расстояния и других заданных условий. Один из известных алгоритмов поиска пути — A*. Он оценивает стоимость разных вариантов маршрута и ищет путь с минимальной суммарной стоимостью. Реализация зависит от игрового движка и проекта. Можно использовать разные алгоритмы поиска, структуры данных и дополнительные системы навигации.
Поэтому NPC, который бежит по коридору к игроку, способен определить маршрут, начать движение по нему и при необходимости корректировать движение из-за изменений в окружающей обстановке.
Почему боты застревают
Навигация работает только в пределах информации, которой располагает система. Если участок карты не считается проходимым, NPC может не найти к нему путь. Проблемы также возникают, когда в игре появляется новый объект: например, дверь закрылась, машина перекрыла дорогу или другой персонаж занял узкий проход.
Тогда бот может остановиться, выбрать неудачный маршрут или начать двигаться туда-сюда.
Нейросети в играх: боты, которые учатся
Классический игровой ИИ в основном следует логике, которую создали разработчики. Машинное обучение позволяет построить систему иначе. Модель может быть обучена заранее, а во время игры только применять полученные параметры.
Обучение на данных реальных игроков
Один из подходов — имитационное обучение. Агент анализирует примеры действий людей и пытается воспроизвести похожее поведение. В исследовательских проектах такие методы применяли к соревновательным шутерам. Например, исследователи Microsoft обучали агента играть в Counter-Strike: Global Offensive на данных человеческого игрового опыта, включая изображения с экрана и действия игроков.
В таких экспериментах пытаются сделать поведение NPC похожим на человеческое. В зависимости от данных обучения такой агент может воспроизводить характерные для игроков позиции, маршруты и ошибки.
Адаптивный ИИ против заранее заданной логики
NPC с заранее заданной логикой действует по правилам, которые определили разработчики. Если ситуация повторяется, его реакция тоже может быть похожей. У машинного обучения другой принцип: модель может находить закономерности в данных и использовать их для выбора действия.
Ещё один подход — обучение с подкреплением. Агент получает условную награду за успешные действия и постепенно учится выбирать стратегии, которые приводят к более высокому результату.
Известные примеры таких исследований — AlphaStar для StarCraft II и OpenAI Five для Dota 2. Эти проекты показали, как обучаемые агенты могут осваивать сложные соревновательные игры.
Бот против живого игрока: в чём разница
Даже сложный NPC может казаться искусственным. Игрок замечает это по странным ошибкам и по характеру решений.
Что выдаёт бота в игре
Компьютерный противник принимает решения не так, как человек. Его поведение определяется программной логикой, параметрами системы или обученной моделью. У него нет человеческой усталости и эмоций: такие состояния есть только в той мере, в какой их смоделировали разработчики. Поэтому NPC не будет нервничать после нескольких поражений или менять стиль игры из-за плохого настроения, если такая механика не предусмотрена.
Ещё один признак — слишком стабильная реакция. Человек может сегодня заметить врага через секунду, а завтра не обратить на него внимания. В играх реакцию NPC часто ограничивают заданными параметрами и правилами, поэтому её проще предсказать.
Правда, разработчики специально добавляют случайность. Персонаж может выбирать разные маршруты, немного менять время реакции или использовать несколько вариантов действий. Это помогает убрать ощущение, что он каждый раз выполняет один и тот же сценарий.
Можно ли перехитрить игровой ИИ
Если противник действует по фиксированной схеме, игрок может найти условие, которое запускает определённую реакцию. Например, выманивать врага в одно и то же место или использовать уязвимость его тактики.
Когда в ход идёт машинное поведение, может быть сложнее предугадать заранее, как будет действовать NPC. Но у такого агента тоже бывают ошибки и ситуации, с которыми он плохо справляется.
Будущее игрового ИИ
Разработчики и исследователи экспериментируют с более гибкими NPC. Один из вариантов — персонажи, которые используют большие языковые модели для диалогов и взаимодействия с игроком.
Такой NPC может не ограничиваться несколькими заранее записанными репликами. Теоретически он способен учитывать контекст разговора, реагировать на нестандартные вопросы и выбирать ответ в зависимости от предыдущего общения.
Но разговор — только часть поведения персонажа. Чтобы такой NPC стал полноценным игровым агентом, ему нужно ещё получать информацию об окружающем мире, планировать манёвры, соблюдать правила игры и взаимодействовать с другими игровыми системами.
Заключение
Игровой ИИ — это набор технологий, которые помогают NPC воспринимать происходящее, выбирать действия и перемещаться по миру. Разные системы отвечают за разные стороны поведения NPC: восприятие мира, принятие решений, планирование маршрута и обучение.