NPC в играх
Всем привет. Был в разъездах, аж руки чешутся что-то написать.
В данный момент я работаю над интеллектов наших ботов. В итоге у меня накопилось немного информации, которой хочу с вами поделиться.
Интеллект NPC, обширная тема. По этому пройдусь по верхам, и применительно к UE проектам.
У каждого персонажа, да же у главного героя, есть свой контроллер. Само собой, работа контроллера игрока включает в себя правила взаимодействия с его аватаром. Но нас интересует контроллер NPC.
И что же тут интересного?
Вообще много. Простую логику, (по типу: пойди туда, остановись здесь, если встретился со стеной, повернись) выполняют в классе бота или его контроллера.
Но сложную логику. На пример поведение при стрельбе, потом поиске персонажа, за тем патрулировании. Разделяют на небольшие задачи. По принципу. Найди врага-> передай его координаты. Подойди к координатам -> ударь. И так далее.
И как же нам, а точнее боту, понять. Какую задачу выполнять?
Для этого существуют диспетчеры задач. В UE он называется Дерево поведения (Behavior tree). Оно выполнено в графическом исполнении, что сильно облегчает отладку и понимание процессов.
Давайте рассмотрим ветку атаки.
Задачи читаются лева направо:
Если нашел цель: сфокусируйся на ней, остановись, очисть лишние значения (переменные, которые были нужны для других дел), немного подожди, и начни стрелять.
Если визуальный контакт потерян: перейди на бег, сфокусируйся на месте где была цель, запусти систему запроса среды, двигайся к выгодной позиции, и сделай это трижды.
Если успеха не достиг: подожди 5 секунд, забудь обо всем, перейди в режим поиска
Само собой, все это невозможно без систем, которые позволяют ботам видеть, слышать, чувствовать прикосновения и так далее.
На пример, для нашего проекта мне пришлось прописывать кастомную логику для зрения.
Когда NPC видит противника, он пускает лучи к 6 ключевым точкам цели, тем самым определяет: полностью виден объект, или частично за укрытием. И от этого уже рассчитывается, время обнаружения, и координаты, куда полетят пули.
Со слухом все так же не просто. Бот не слышит, у него нет ушей. Да и многие звуки ему не нужны. И по этому мы "пришиваем" источники звука. При ходьбе, стрельбе, взрыве гранат. Задаем ему радиус и тег. На пример у шагов один тег, у стрельбы другой. И бот реагирует на них по разному. Либо вальяжно тащится к точке, где слышал шум. Либо несется туда сломя голову.
Так же, нам иногда требуется, чтобы жители нашей игры сделали что-то необычное. Подошли к пульту, посмотрели куда-то. В общем, сделали срежиссированное событие. Для это пишутся особые задачи, и привязываются к конкретной местности за счет объемов (триггеров). Но это уже темные дебри. Не буду вас в них загонять.
Вот небольшая зарисовка о действии наших ботов, в дневнике
Больше информации о нашем проекте, а так же по геймдев тематике ты найдешь в нашем профиле. Заходи, читай, смотри.
Благодарю, что прочел эту статью!
Буду рад, если напишешь, какие боты тебя поражали своим интеллектом, возможно возьмем на заметку твой референс.