Сергей Тюльпин
Портфолио Unity Разработчика
Система Заданий (2024)
В рамках учебной программы по программированию в Hanze University я спроектировал и разработал систему заданий для существующей игры на основе шаблона Unity FPS Microgame.
Сначала я разобрался в том, как устроена игра. Затем приступил к проектированию системы: составил список требований, подготовил UML-диаграмму и изучил существующие системы заданий. В завершение я подготовил технический дизайн-документ (Technical Design Document), описывающий разработанную систему.
Исследования
Перед разработкой и проектированием системы я изучил различные примеры существующих систем заданий и несколько руководств по разработке различных систем заданий. В итоге я составил этот список требований и UML-диаграмму классов.

Quest
В основе системы заданий лежит класс Quest, наследующийся от ScriptableObject. Объекты заданий создаются через меню создания ассетов и содержат название, описание и список этапов. Также можно указать другое задание, которое необходимо завершить для получения текущего.
Для организации заданий я использовал паттерн «Состояние» (State), где каждый этап представляет собой отдельное состояние задания. Такой подход делает структуру заданий более упорядоченной и логичной. Этапы создаются в инспекторе непосредственно внутри ScriptableObject задания. Каждый этап содержит название и список целей.
Objectives
В системе предусмотрены три типа целей:
-
Достичь точки — создаёт область, которой игрок должен достичь для выполнения цели. Содержит описание, префаб целевой точки и координаты её появления.
-
Уничтожить противников — для выполнения цели нужно уничтожить определённое количество противников заданного типа. Я также создал перечисление (enum) типов противников: каждому можно назначить уникальный тип либо использовать один тип для нескольких разных противников — в зависимости от потребностей дизайнеров. Цель содержит описание, необходимое количество противников, их тип и порог для уведомления о количестве оставшихся противников. Последняя функция была реализована не мной, поэтому я оставил её без изменений.
-
Поговорить — для выполнения цели нужно завершить определённый диалог. Содержит описание и необходимый объект диалога.
Диалоги
Я решил сделать простую систему диалогов и создал класс, наследующийся от ScriptableObject. Объекты диалогов создаются через меню создания ассетов и содержат список реплик и список вариантов ответа.
Варианты ответа создаются в инспекторе непосредственно внутри ScriptableObject диалога. Каждый вариант содержит текст ответа, диалог, который запускается при его выборе, и два необязательных поля: требуемое задание и требуемую цель. Эти поля позволяют связывать варианты ответа с заданиями.
Если для варианта ответа указано требуемое задание, он отображается только тогда, когда это задание доступно. Если указана требуемая цель, вариант ответа отображается только тогда, когда эта цель активна.







