Поведение неигровых персонажей (NPC) очень важно во многих играх. Взаимодействие с миром самых разных неигровых персонажей — от компаньонов до боссов и от продавцов до охранников — делает игровой процесс увлекательным и захватывающим. На первый взгляд их поведение может выглядеть странным, однако на самом деле большинство неигровых персонажей следует строгому набору логических правил. Понимание этих правил является ключевым при создании неигровых персонажей, и на этой странице вы узнаете о том, как неигровые персонажи взаимодействуют с миром и как вы можете визуализировать их поведение и управлять им, чтобы создать уникальную игру.
Устройство «Генератор неигровых персонажей» упрощает множество взаимодействий с неигровыми персонажами и ИИ. Чтобы узнать об устройстве больше, см. разделы «Устройство "Генератор неигровых персонажей"», «Определение неигрового персонажа», «Создание пользовательского поведения неигрового персонажа» и «Использование генератора неигровых персонажей с анимациями».
Логические правила
Большинство неигровых персонажей не ведут себя случайным образом, а выбирают следующее действие, основываясь на своём состоянии. Состояние неигрового персонажа можно представить как снимок состояния его мира в определённый момент времени. Действия, которые предпринимает неигровой персонаж, действия игроков, а также любые другие переменные, о которых персонаж может знать, — всё вместе это составляет состояние неигрового персонажа. Неигровые персонажи используют логические правила, чтобы решить, когда переходить из одного состояния в другое, и могут подчиняться множеству различных правил в зависимости от своего текущего состояния.
Конечные автоматы
Общепринятым средством визуализации состояний является конечный автомат (FSM). Конечный автомат описывает различные состояния, в которых может находиться неигровой персонаж, и переходы, которые он совершает между состояниями. Узлы представляют различные состояния, а стрелки между ними описывают условия, необходимые для перехода из одного состояния в другое. Схема базового FSM может выглядеть следующим образом:
FSM на этой схеме имеет три состояния и начинает работу в состоянии 1. Как только выполняются определённые условия, неигровой персонаж переходит из одного состояния в другое и продолжает переходить между состояниями по мере изменения условий.
Для примера рассмотрим FSM простого персонажа — боевого медика. Если поблизости есть раненые товарищи по команде, медик их лечит. Если поблизости есть враги, медик их атакует. В противном случае он бездействует. Базовый FSM для этого персонажа может выглядеть следующим образом:
FSM помогают визуализировать и понять, как ведут себя персонажи, а также спланировать, как персонажи будут реагировать на события и окружающий мир.
Пример конечного автомата для охранника
Рассмотрим внутриигровой пример — неигрового персонажа-охранника. Неигровые персонажи типа «Охранник» создаются либо с помощью устройства «Генератор охранников», либо с помощью определения неигрового персонажа для охранников. Неигровой персонаж типа «Охранник» следует определённому набору логических правил, которые соответствуют различным активным состояниям, в которых он может находиться:
Бездействие
Патрулирование
Подозрительный
Внимание!
Атака
После появления охранник либо бездействует, либо начинает патрулирование, если включён соответствующий параметр. В момент обнаружения цели значение шкалы насторожённости охранника начинает расти. Как только шкала достигает предела, охранник переходит в состояние тревоги, в противном случае он возвращается к патрулированию. Находясь в состоянии тревоги, охранник постоянно приближается к своей цели и атакует её, когда она оказывается в пределах досягаемости. Если цель будет устранена или сбежит от охранника, он вернётся к патрулированию. Вы можете визуализировать логику охранника с помощью следующего FSM:
Этот FSM является высокоуровневым представлением поведения охранника, однако ему может быть доступно гораздо больше правил и действий. Неигровые персонажи могут выполнять несколько действий одновременно, и при добавлении таких персонажей в игру важно учитывать факторы окружения.
Состояния неигровых персонажей и Verse
Неигровые персонажи в UEFN наследуют от ИИ-модуля и предоставляют функции, которые вы можете использовать для непосредственного управления их состоянием. Например, интерфейс navigatable позволяет переместить неигрового персонажа в определённую зону, а focus_interface — сфокусировать его на некотором объекте или агенте. Используя эти интерфейсы либо в устройствах Verse, либо в поведениях неигровых персонажей, можно создавать пользовательских неигровых персонажей, наполняя ими свою игру.
Подробную информацию о создании пользовательских типов поведения неигровых персонажей см. в разделе Создание пользовательского поведения неигрового персонажа.
Для примера рассмотрим следующее поведение неигрового персонажа:
using { /Fortnite.com/AI }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Game }
using { /Verse.org/Simulation }
on_damaged_behavior<public> := class(npc_behavior):
# This function runs when the NPC is spawned in the world and ready to follow a behavior.
OnBegin<override>()<suspends>:void=
if:
У всех неигровых персонажей реализован интерфейс damageable, который позволяет им получать урон. Подписав функцию на событие DamagedEvent интерфейса damageable, вы сможете узнать о получении урона вашим неигровым персонажем и запустить соответствующий код. В приведённом выше сценарии, когда неигровому персонажу, реализующему это поведение, будет нанесён урон, он получит агента, который нанёс ему урон, и сохранит его в переменной InstigatingAgent. Затем с помощью интерфейса navigatable неигрового персонажа он назначит инициатора в качестве NavigationTarget и будет преследовать его.
Это поведение является расширением исходного поведения неигрового персонажа. Если этот сценарий закреплён за персонажем типа «Охранник», он по-прежнему будет выполнять все обычные действия охранника, но при получении урона будет двигаться непосредственно к своей цели. То же самое относится к диким животным и персонажам пользовательского типа. Сценарии поведения неигровых персонажей — это мощный инструмент расширения их функциональности, позволяющий создавать персонажей, которые впишутся в вашу игру. Дополнительную информацию о создании пользовательских сценариев поведения неигровых персонажей см. в разделе Создание пользовательского поведения неигрового персонажа.
Типы неигровых персонажей
Разные типы неигровых персонажей реализуют разное базовое поведение, и пользовательские неигровые персонажи, создаваемые на основе этих типов, наследуют данное поведение. Дополнительную информацию о различных базовых типах неигровых персонажей и связанном с ними поведении см. в разделе Типы неигровых персонажей.
Перемещение в мире
Перемещаясь по миру, неигровые персонажи должны выбирать наилучший маршрут к месту назначения. Должен ли охранник перелезать через стену или пробивать её насквозь? Должен ли он переплывать водоём или обходить его вдоль берега? Неигровые персонажи принимают эти решения на основе навигационной сетки мира. Неигровые персонажи используют навигационную сетку для принятия решений в отношении поиска пути и меняют свой выбор по мере изменения мира вокруг них. Дополнительную информацию об использовании и визуализации навигационной сетки можно найти в разделе Навигационная сетка.