6 типов NPC-персонажей (с живыми 3D-примерами из реальных миров)
Создайте собственных NPC-персонажей
Квест, торговец, враг, компаньон, фон, интерактив — шесть типов NPC-персонажей, каждый проиллюстрирован реальным 3D-миром, в который можно войти прямо сейчас.
Большинство типов NPC-персонажей, которые попадают в настоящий 3D-мир, делятся на шесть категорий: квест, торговец, враг, компаньон, фон и интерактив. Выбранная категория определяет, какие системы придётся подключать — состояние диалога, инвентарь, поиск пути, агро или вообще ничего, — а также то, что сломается первым, когда игрок сделает нечто, чего вы не предусмотрели.
Эта страница разбирает шесть типов NPC-персонажей по очереди. Для каждого даётся определение, механизм, благодаря которому он работает в движке, наиболее часто встречающийся сбой и живой мир из 3D-конструктора игр Neta Studio, по которому можно пройтись вместо разглядывания скриншота.
Краткий ответ: шесть типов
Шесть типов — это квестовые NPC, которые выдают и завершают задачи; торговые NPC, которые обменивают предметы на валюту; NPC-враги, которые сражаются и сохраняются между боями; NPC-компаньоны, которые следуют за игроком; фоновые NPC, которые населяют сцену, не взаимодействуя; и интерактивные NPC — объекты, животные и элементы обстановки, реагирующие на месте.
Вот вся таксономия в одном предложении. Остальная часть страницы разбирает их по одному — что каждый тип делает механически, что ломается первым, и мир из конструктора, который можно открыть и пройти.
Почему тип важнее модели
Сетка, риг и набор анимаций в значительной степени взаимозаменяемы между типами. Одна и та же сетка жителя на одном и том же клипе ожидания может быть и квестодателем, и торговцем, и фоновым персонажем. Различается набор компонентов: граф диалогов, таблица инвентаря, агент навигационной сетки, радиус агро, триггерный объём или флаг сохранения.
Выберите сначала тип — и вы потратите время на настройку единственной действительно нужной системы. Выберите сначала модель — и построите четыре системы, которыми никогда не воспользуетесь. Mini World — самое дешёвое место, чтобы сравнить их бок о бок, потому что все шесть помещаются в одной сцене без экрана загрузки между ними.
Квестовые NPC
Квестовый NPC владеет состоянием сюжета. Он предлагает задачу, знает, выполнена ли она, и выдаёт награду, когда она выполнена. Механически это граф диалогов как минимум с тремя входными условиями — не начато, активно, завершено — плюс ссылка на флаг задачи, который может установить остальной мир.
Сбой в том, что этот флаг хранится на самом NPC. Если NPC уничтожен, выгружен потоком или мир перезагружается, квест сбрасывается в состояние «не начато», пока игрок всё ещё держит предмет, который ему велели собрать. Теперь у игрока есть предмет инвентаря без владельца и без возможности сдать. Храните флаг в сохранении игрока, привязанным к стабильному идентификатору квеста, и пусть граф диалогов читает эту переменную при открытии панели, а не при появлении NPC.
Второе, что нужно сделать правильно, — проверка сдачи. Если завершение срабатывает только внутри тесного объёма у ног NPC, игроки, сдающие задание с движущегося транспорта или через забор, его пропустят. Дайте проверке завершения щедрый радиус плюс проверку прямой видимости и держите её отдельно от подсказки взаимодействия, чтобы проход рядом с NPC не завершал автоматически квест, который игрок ещё не прочитал.
The Cyclops' Island — самый короткий способ увидеть весь цикл. Там один дающий, короткая цепочка задач и награда, открывающая остаток острова. Подойдите, возьмите задачу, уйдите, вернитесь и посмотрите, что происходит с входным условием диалога, когда вы возвращаетесь с предметом. Этот переход между тремя состояниями и есть весь квестовый NPC, и, увидев его один раз, вы сможете воссоздать его где угодно.
Торговые NPC
Торговый NPC обменивает предметы на валюту. Вот и вся механика. Механически торговец — это две таблицы и проверка: список товаров с идентификаторами предметов и ценами покупки, правило цены продажи и сравнение валюты, выполняемое до подтверждения сделки.
Роль в экономике шире самой сделки. Торговцы — основной сток валюты, и именно это не даёт добыче накапливаться в число, на которое игроку становится наплевать. Они же — регулирующий клапан темпа: то, чем торгует торговец, определяет, что игрок может попробовать дальше. Когда тестировщик застревает, первое, что стоит проверить, — ассортимент торговца, а не сложность врагов.
Это самый простой тип в постройке. Триггерный объём, список предметов и панель. Ни навигационной сетки, ни агро, ни графа диалогов, если он вам не нужен. Панель — это почти вся работа.
Он же и самый простой способ сделать скучно. Фиксированный ассортимент превращает торговца в торговый автомат: игрок покупает один раз и больше не возвращается. Два дешёвых исправления. Первое — пополнение запасов: меняйте список товаров по таймеру или когда срабатывает мировое событие. Второе — ограничение доступа: прячьте предметы, пока игрок где-то не побывал или что-то не зачистил. Ни то, ни другое не требует новой системы. Держите цену продажи строго ниже цены покупки, иначе у игрока появляется бесконечный цикл, и экономика заканчивается ещё до второй области.
NPC-враги
NPC-враг — это враждебный действующий субъект, существующий в мире независимо от того, сражается ли с ним игрок. У него есть состояния вне боя — ожидание, патрулирование, тревога — и переход в бой. Вот граница между NPC-врагом и обычным соперником под управлением ИИ.
Соперник под управлением ИИ существует только внутри матча. Он появляется в начале матча, удаляется в конце и не несёт состояния между раундами. Его поведение ограничено правилами матча, а матч — это весь мир. NPC-враг должен отвечать на вопросы, которых сопернику под управлением ИИ никогда не задают: куда он идёт, когда игрок уходит, возвращается ли он после смерти, существует ли он по-прежнему после сохранения и перезагрузки игры.
Почему это различие важно для дизайна: размещение NPC-врагов — это дизайн уровня, а не настройка матча. Вы выбираете радиус агро, маршрут патрулирования и дистанцию привязки в мировых координатах, и эти числа меняют то, как читается уровень. Радиус агро больше, чем линии обзора уровня, начинает бой раньше, чем игрок увидит врага. Слишком длинная привязка превращает одну схватку в погоню через всю карту, которая втягивает в неё каждое другое столкновение. Дайте каждому врагу три настраиваемых на уровне экземпляра числа: радиус агро, дистанцию привязки и время до выхода из боя.
Сохранность — вторая половина. Решите для каждого врага, возрождается ли он и по какому триггеру — при перезагрузке мира, по таймеру или никогда. Если вы не решите, поведение по умолчанию почти всегда будет «никогда», и вы тихо удалите кусок мира после одного прохождения. Смерть врага также требует правила для трупа: либо тело исчезает по таймеру и добыча выпадает в этот момент, либо оно остаётся, а таблица добычи читается с трупа. Смешивание двух подходов порождает врагов, которых можно обобрать дважды.
NPC-компаньоны
Компаньон следует за игроком, участвует в перемещении или бою и несёт состояние между сценами — здоровье, инвентарь, иногда привязанность. Это единственный тип, который находится на экране большую часть времени и что-то делает в большинстве этих кадров.
Именно проблема поиска пути делает компаньонов сложными. Компаньон — это агент навигационной сетки, цель которого — другой движущийся агент. Первыми отказывают дверные проёмы: если радиус агента у компаньона шире дверного проёма минус запас, он отказывается прокладывать путь и игрок идёт дальше один. Узкие лестницы, стремянки и движущиеся платформы отказывают так же. Три настройки решают большую часть этого. Смещение следования — цельте в точку позади игрока, а не в точную трансформацию игрока — дистанция остановки, чтобы компаньон не налезал на камеру, и правило догоняния.
Правило догоняния не опционально. Если компаньон находится вне прямой видимости дольше пары секунд и отстал больше чем на несколько корпусов, телепортируйте его в ближайшую точку навигационной сетки позади игрока. Каждый игрок в конце концов оставит компаньона застрявшим на геометрии, и каждый игрок это заметит. Без телепортации сбой не в том, что компаньон теряется; сбой в том, что игроку приходится возвращаться за ним, дважды, а потом он перестаёт его брать.
Эта зона охвата — также причина, по которой компаньоны труднее всего довести до релиза. Компаньон касается всего: он перетягивает агро врагов, он блокирует движение самого игрока, он срабатывает на нажимных плитах, он учитывается в лимитах появления, он появляется в скриптовых сценах, рассчитанных на одного актёра, и он встаёт перед камерой во время диалога. Теперь каждая другая система должна отвечать на вопрос, что компаньон делает здесь. Торговец ничего не делает, когда вы проходите мимо. Компаньон что-то делает в каждой сцене, включая те, что никогда не были рассчитаны на него. Поэтому компаньонов вырезают чаще, чем что-либо ещё из этого списка.
Фоновые NPC
Фоновый NPC существует, чтобы место читалось как обитаемое. Ни диалогов, ни инвентаря, ни взаимодействия. Обычно три-четыре клипа ожидания, цикл ходьбы и либо сплайновый путь, либо небольшой радиус патрулирования.
Их нужно меньше, чем вы думаете. Важно, сколько их одновременно внутри пирамиды видимости камеры, а не сколько их существует на уровне. Улица читается как населённая уже при горстке видимых персонажей, если некоторые из них двигаются. Глаз считывает движение и силуэт, а не число голов. Разместите разреженный набор якорей там, куда камера действительно смотрит — вдоль основного маршрута, возле дверей, которыми пользуется игрок, — и оставьте остальную часть уровня пустой.
Конкретно толпу заставляет выглядеть неправильно синхронизация. Если каждый фоновый NPC запускает одно и то же ожидание на одном и том же кадре, сцена читается как ряд манекенов. Сместите начало клипа каждого экземпляра на случайную долю длины клипа и дайте идущим персонажам чуть разные скорости, чтобы они расходились на длинной линии обзора. Agent Sprite Forge — самый быстрый способ получить небольшой набор клипов, нужный толпе, — несколько ожиданий и ходьбу, — не анимируя вручную каждого персонажа.
Контроль затрат здесь важнее, чем где-либо ещё, потому что фоновые NPC — единственный тип, который размещают массово. Держите их вне навигационной сетки, чтобы они не расходовали запросы пути, нужные настоящим агентам. Делите один скелет и один атлас материалов между всеми ними. Дайте им либо отсутствие коллизии, либо радиус выталкивания, который не может заблокировать игрока. И не давайте одному из них граф диалогов на случай, если игрок с ним заговорит — фраза-заглушка учит игрока тому, что мир пустой, и он это проверит.
Интерактивные NPC
Интерактивные NPC реагируют на месте: кнопки, рычаги, двери, таблички, животные. У них есть состояние и реакция. У них нет расписания, маршрута или дерева диалогов.
Граница с реквизитом — это состояние. Реквизит проигрывает анимацию и возвращается в покой или делает одно действие без памяти о том, что сделал его. Как только у объекта появляется постоянная переменная состояния — заперто или отперто, включено или выключено, накормлено или голодно — и он ведёт себя иначе при втором взаимодействии, он уже на территории NPC и требует той же дисциплины сохранения, что и флаг квеста. Один бит состояния и одна реакция — это реквизит. Два или более состояний с разными реакциями — это NPC, даже когда NPC — это дверь.
Животные относятся к этой категории, а не к фону. Животное, которое убегает, когда игрок пересекает радиус, имеет вход осведомлённости и реакцию, то есть небольшой конечный автомат. Реализация та же, что и для двери: радиус взаимодействия или осведомлённости, переменная состояния, записываемая в сохранение, и конечный автомат анимаций как минимум с двумя клипами.
Сбой в том, что подсказки срабатывают сквозь геометрию. Если радиус взаимодействия щедрый, а проверка прямой видимости отсутствует, игроки получают подсказку взаимодействия для двери по другую сторону стены. Обусловьте подсказку трассировкой луча плюс радиусом и обусловьте само взаимодействие той же проверкой, а не только подсказкой. Иначе подсказка исчезает у стены, но поставленный в очередь ввод всё равно открывает дверь.
Какой тип вам строить?
Выбирайте по цели, а не по тому, как выглядит персонаж. Первый столбец — то, что вы хотите, чтобы делал игрок. Второй — тип, который это даёт. Третий — то, что становится дорого менять, когда всё остальное уже построено поверх него.
Если персонаж выполняет две работы, стройте его как одного персонажа с двумя наборами компонентов, а не как двух персонажей, стоящих рядом. Торговец, который ещё и выдаёт квест, — это один интерактивный объект с двумя панелями и одной общей ссылкой сохранения. Цена в том, что теперь оба потока нужно тестировать друг против друга — игрок, который завершит квест, ни разу не открыв магазин, обнаружит ассортимент в состоянии, для которого вы, возможно, не написали случая.
Если вы не уверены, куда отнести персонажа, начните с фона и добавляйте. Добавление триггерного объёма и графа диалогов превращает фонового NPC в квестодателя, не трогая сетку. Обратное дорого: вырывание взаимодействия из компаньона означает повторное тестирование каждой сцены, в которой он появлялся.
| Цель | Тип | Первое, что нужно сделать правильно |
|---|---|---|
| Игроку нужна причина куда-то отправиться | Квестовый NPC | Флаг квеста в сохранении игрока, привязанный к стабильному идентификатору квеста |
| Игроку нужно превратить добычу в пригодное снаряжение | Торговый NPC | Таблица товаров плюс проверка валюты, выполняемая до подтверждения сделки |
| Игроку нужна проверка навыка или ресурса | NPC-враг | Радиус агро, дистанция привязки и время до выхода из боя, настроенные на уровне экземпляра |
| Игроку нужно выжить на длинном маршруте | NPC-компаньон | Смещение следования, дистанция остановки и правило телепортации догоняния |
| Сцена должна читаться как обитаемая | Фоновый NPC | Общие клипы со случайными смещениями фазы и без агента навигационной сетки |
| Мир должен реагировать на игрока на месте | Интерактивный NPC | Одна постоянная переменная состояния и один триггерный объём с проверкой прямой видимости |
Войдите в мир, которому он принадлежит
Спрайт — это персонаж, которому негде стоять. Последний шаг — тот, которого не предлагает больше никто: возьмите только что созданный лист и поместите его в мир, по которому можно ходить, — небольшой остров, планету, дождливый уголок улицы. Каждый мир на этом сайте был сделан из одного письменного описания и опубликован как страница, в которую можно играть.
FAQ
Сколько существует типов NPC-персонажей? +
Шесть, по нашему делению: квест, торговец, враг, компаньон, фон и интерактив. Деление функциональное, а не биологическое. Оно организовано по системам, которые нужны персонажу, — состояние диалога, инвентарь, поиск пути, агро или один флаг состояния, — так что два персонажа с совершенно разными моделями могут быть одного типа.
Враг — это NPC? +
Да, если он существует в мире вне боя. У NPC-врага есть состояния ожидания, патрулирования и тревоги, и он сохраняется между схватками, поэтому ему нужны правило возрождения и правило сохранения. Соперник под управлением ИИ, существующий только внутри матча, в этом смысле не NPC, потому что ничто в нём не переживает матч.
Какой тип проще всего построить? +
Торговца. Триггерный объём, список предметов с ценами, проверка валюты и панель. Здесь нет ни навигационной сетки, ни графа диалогов, ни состояния, которое нужно сохранять помимо инвентаря и денег игрока, которые у вас уже есть.
Нужен ли NPC-компаньонам ИИ? +
Им гораздо больше нужны поиск пути и правило следования, чем принятие решений. Сложная часть — оставаться на навигационной сетке рядом с движущейся целью, проходя через дверные проёмы и лестницы, плюс телепорт догоняния на случай, когда это не удаётся. Выбор того, кого атакует компаньон, — малая часть работы.
Что такое фоновый NPC? +
Неинтерактивный персонаж, размещённый, чтобы сцена читалась как обитаемая. Ни диалогов, ни инвентаря, обычно ни агента навигационной сетки и часто ни коллизии. Он существует для камеры, поэтому важно, сколько их видно одновременно и смещены ли их циклы анимации друг относительно друга.
Может ли один NPC быть двух типов? +
Да, и обычно так и должно быть — торговец, который ещё и выдаёт квест, это один интерактивный объект с двумя панелями и одной общей ссылкой сохранения. Цена — комбинаторное тестирование: каждое состояние квеста, умноженное на каждое состояние магазина, — это случай, который нужно проверить, и первыми игроки находят те, что вы не написали.
Назад в 3D-конструктор игр
Все 31 завершённых 3D-мира, игры и сцены живут на одной странице — каждый из них играбельный.