top of page

Система Заданий (2024)

В рамках учебной программы по программированию в Hanze University я спроектировал и разработал систему заданий для существующей игры на основе шаблона Unity FPS Microgame.

Сначала я разобрался в том, как устроена игра. Затем приступил к проектированию системы: составил список требований, подготовил UML-диаграмму и изучил существующие системы заданий. В завершение я подготовил технический дизайн-документ (Technical Design Document), описывающий разработанную систему.

Исследования

Перед разработкой и проектированием системы я изучил различные примеры существующих систем заданий и несколько руководств по разработке различных систем заданий. В итоге я составил этот список требований и UML-диаграмму классов.

UML.png

Quest

В основе системы заданий лежит класс Quest, наследующийся от ScriptableObject. Объекты заданий создаются через меню создания ассетов и содержат название, описание и список этапов. Также можно указать другое задание, которое необходимо завершить для получения текущего.
 

Для организации заданий я использовал паттерн «Состояние» (State), где каждый этап представляет собой отдельное состояние задания. Такой подход делает структуру заданий более упорядоченной и логичной. Этапы создаются в инспекторе непосредственно внутри ScriptableObject задания. Каждый этап содержит название и список целей.

Objectives

В системе предусмотрены три типа целей:

  1. Достичь точки — создаёт область, которой игрок должен достичь для выполнения цели. Содержит описание, префаб целевой точки и координаты её появления.

  2. Уничтожить противников — для выполнения цели нужно уничтожить определённое количество противников заданного типа. Я также создал перечисление (enum) типов противников: каждому можно назначить уникальный тип либо использовать один тип для нескольких разных противников — в зависимости от потребностей дизайнеров. Цель содержит описание, необходимое количество противников, их тип и порог для уведомления о количестве оставшихся противников. Последняя функция была реализована не мной, поэтому я оставил её без изменений.

  3. Поговорить — для выполнения цели нужно завершить определённый диалог. Содержит описание и необходимый объект диалога.

Диалоги

Я решил сделать простую систему диалогов и создал класс, наследующийся от ScriptableObject. Объекты диалогов создаются через меню создания ассетов и содержат список реплик и список вариантов ответа.

Варианты ответа создаются в инспекторе непосредственно внутри ScriptableObject диалога. Каждый вариант содержит текст ответа, диалог, который запускается при его выборе, и два необязательных поля: требуемое задание и требуемую цель. Эти поля позволяют связывать варианты ответа с заданиями.

Если для варианта ответа указано требуемое задание, он отображается только тогда, когда это задание доступно. Если указана требуемая цель, вариант ответа отображается только тогда, когда эта цель активна.

bottom of page