Разработка квестовых цепочек и нарративного дизайна игр

Наша компания по разработке видеоигр ведет независимые проекты, совместно с клиентом создает игры и оказывает дополнительные операционные услуги. Опыт нашей команды позволяет нам охватить все игровые платформы и разработать потрясающий продукт, соответствующий видению клиента и предпочтениям игроков.

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1 услугВсе 242 услуг
Разработка квестовых цепочек и нарративного дизайна игр
Сложная
от 1 недели до 2 месяцев
Часто задаваемые вопросы
Наши компетенции
Какие этапы разработки игры?
Последние работы
  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    671
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    860
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    533

Разработка квестовых цепочек и нарративного дизайна игр

Квестовая система ломается не в написании сценария — она ломается в менеджменте состояний. Квест с тремя целями, двумя возможными финалами и зависимостью от трёх других квестов — это минимум 12 флагов состояний, которые нужно корректно инициализировать, обновлять и проверять. Если эта логика разбросана по PlayerPrefs, хардкоду и случайным if-проверкам в NPC-скриптах — система гарантированно сломается на граничных случаях.

Архитектура квестовой системы

Квест — это объект данных с идентификатором, списком целей (QuestObjective[]) и текущим состоянием (QuestState). Состояния: Locked, Available, Active, ObjectivesComplete, Completed, Failed. Переходы между ними — только через QuestManager, никогда напрямую.

QuestManager — синглтон (или сервис-локатор) с Dictionary<string, QuestData> по quest ID. Методы: StartQuest(id), CompleteObjective(questId, objectiveId), FailQuest(id). Каждый вызов публикует событие OnQuestStateChanged(QuestData) — на него подписываются UI, NPC-контроллеры, аналитика.

QuestData ScriptableObject хранит статику квеста: название, описание, список целей с текстом и типом (KillObjective, CollectObjective, ReachLocationObjective, TalkObjective), список prerequisite quest ID. Runtime-состояние квеста живёт отдельно — в QuestRuntimeData, сериализуемом в save-файл.

Разделение статики и runtime — ключевое. ScriptableObject для квеста не изменяется в play mode; QuestRuntimeData живёт только в памяти и в сохранении. Это исключает случайную мутацию данных квеста в редакторе при тестировании.

Цепочки и зависимости

Квестовая цепочка — это DAG (направленный ациклический граф) квестов, где каждый последующий квест имеет prerequisites — список квестов, которые должны быть Completed перед разблокировкой. QuestManager проверяет prerequisites при попытке StartQuest() и при каждом изменении состояния любого квеста автоматически апдейтит Locked → Available для разблокировавшихся.

Цикличные зависимости (квест A требует B, квест B требует A) — баг, который нужно ловить в Editor-скрипте при сохранении asset, не в рантайме. QuestDependencyValidator : AssetPostprocessor обходит граф DFS и логирует ошибку при обнаружении цикла.

Нарративный дизайн: структурирование истории вокруг геймплея

Нарративный дизайн — это не «написать хороший текст». Это интеграция истории в механики. Лучшие нарративные моменты в играх работают потому, что механика и нарратив говорят об одном и том же. В Papers, Please механика проверки документов — это и есть нарратив о конформизме и моральном выборе. В Celeste платформенная сложность — метафора борьбы с тревожностью.

Narrative pillars — три-пять тезисов, описывающих эмоциональную суть истории. Каждый квест, диалог и механика проверяется на соответствие этим тезисам. Если квест не работает ни на один pillar — зачем он?

Момент раскрытия информации — нарративный инструмент, который сильно влияет на дизайн квестов. Игрок узнаёт что-то важное в момент действия, а не до него. «Убей предателя» — тривиальный квест. «Найди виновника смерти мэра» → игрок собирает улики → в финале понимает, что это был его наставник — это нарратив через геймплей.

Типы квестовых целей и их реализация

KillObjective — самый простой тип: подписаться на событие EnemyDeath(EnemyType), инкрементировать счётчик, проверить count >= required. Проблема возникает при смене сцены: если счётчик хранится в MonoBehaviour на квест-объекте, который выгружается — данные теряются. Счётчик должен жить в QuestRuntimeData, который персистентен.

CollectObjective — завязан на InventorySystem: подписаться на OnItemAdded(ItemDefinition, quantity), проверить соответствие нужному предмету. Нюанс: если предмет квестовый и его нельзя выбросить, нужен флаг isQuestItem и проверка в InventoryContainer.TryRemove().

ReachLocationObjective — trigger-зона (BoxCollider isTrigger) с компонентом QuestTrigger, при входе в которую публикуется событие LocationReached(questId, objectiveId). Важно: OnTriggerEnter не срабатывает если объект телепортируется в зону — нужно дополнительно проверять позицию при загрузке сцены.

Нелинейность и ветвящиеся финалы

Ветвящийся финал квеста требует, чтобы обе ветки были полностью написаны и реализованы — половина студий срезает углы и делает одну «настоящую» концовку и одну заглушку. Игроки это чувствуют.

Технически: финал определяется набором флагов, собранных по ходу квеста (choiceA_taken, evidence_found, npc_alive). В QuestCompleteHandler логика: if (flagSet.Contains("evidence_found") && flagSet.Contains("npc_alive")) → outcome = "JusticeEnding". Флаги — строки в HashSet<string> внутри QuestRuntimeData.

Ориентировочные сроки

Масштаб Состав Срок
Один квест 3–5 целей, линейный 3–5 дней
Квестовая цепочка 5–10 квестов, зависимости, простые ветвления 2–4 недели
Основной сюжет 20–40 квестов, нелинейность, множество финалов 2–4 месяца
Полная нарративная система + инструментарий, редактор, локализация 4–6 месяцев

Процесс

Проектирование начинается с квестового графа в Miro или Articy:Draft — визуализация всех зависимостей. Потом QuestData ScriptableObject создаётся для каждого квеста с заполненными prerequisites. Код QuestManager пишется и покрывается тестами раньше, чем создаётся первый квест контента. Это звучит как overhead, но экономит недели правок позже.