Skip to content

Scenario system for interactive manuals or puzzle games, made with Unity 2019.4

License

Notifications You must be signed in to change notification settings

aisus/unity-scenario-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cистема сценариев для игр/интерактивных визуализаций на Unity. Позволяет создавать сложные сценарии и последовательности действий для прохождения уровня в редакторе Unity без написания дополнительного кода/конфигураций. Реализовано на Unity 2019.4.8f1

Скачать сборку для Windows x64

alt text

Принципы работы

Объекты

Интерактивный сценарий можно разбить на последовательность атомарных операций с объектами в сцене. Каждый объект в описанных сценариях может находиться в двух основных состояниях:

  • Неактивен (Inactive)
  • Активен (Active)

Примеры:

  • Лампочка. Inactive - выключена, Active - включена.
  • Сменная часть устройства. Inactive - лежит на столе, Active - установлена в устройство.

Операции с объектами производятся кликами мыши, клик переводит объект из неактивного в активное состояние и наоборот, если это позволяется типом объекта.

Типы объектов:

  • Одноразовое использование (UseOnce). После активации становится недоступным для взаимодействия. Пример - провод, который необходимо перерезать.
  • Одна активация (Trigger). Активируется один раз. Повторное взаимодействие возможно, но не меняет состояние. Пример - кнопка пожарной сигнализации.
  • Переключатель (Switch). Сохраняет состояние. Примеры - выключатель, крышка, сменная часть устройства.

Cценарии

Сценарий состоит из этапов, каждый из которых подразумевает выполнение определенных операций с объектами в сцене. Сценарии строго последовательны, и в текущей реализации не допускают ветвления или отмены этапов.

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

Пример сценария:

Открыть защелку на крышке устройства, открыть крышку устройства, нажать красную кнопку, закрыть крышку устройства, закрыть защелку.

  1. Доступно: Защелка (Switch). Условие: Защелка открыта (Active)
  2. Доступно: Защелка, крышка (Switch). Условие: Крышка открыта (Active)
  3. Доступно: Защелка, крышка, десять кнопок разных цветов (Trigger). Условие: Красная кнопка нажата (Active)
  4. Доступно: Защелка, крышка, десять кнопок разных цветов. Условие: Крышка закрыта (Inactive)
  5. Доступно: Защелка, крышка. Условие: Защелка закрыта (Inactive)

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

Детали реализации проекта

Для перемещения камеры в сцене используется FPS CharacterController из Standard Assets.

Выделение границ объектов при наведении камеры реализовано шейдерами UltimateOutline.

Сценарии действий и списки названий объектов настраиваются как ScriptableObject ассеты.

Все ассеты и ресурсы сценариев хранятся в \Assets\TrainingSystem\TrainingScenarios

Создание интерактивных объектов и сценариев

Интерактивными объектами являются GameObject в сцене, имеющие компоненты Collider, Animator и InteractiveBehaviour. InteractiveBehaviour связан с InteractiveObjectEntity - данными объекта. В InteractiveObjectEntity задается строковый идентификатор объекта, тип взаимодействия, текущее состояние и доступность для действий. Объект должен иметь слой Interactive.

alt text

При произведении действия с InteractiveBehaviour активируются триггеры его Animator - Activate, Deactivate. Рекомендуется создавать AnimationController для новых объектов как AnimationOverrideController. В проекте созданы три базовых Animator для трех типов объектов - AnimatorBase_Trigger, AnimatorBase_Switch, AnimatorBase_UseOnce.

Сценарий создается через CreateAssetMenu. В созданном ScriptableObject можно настраивать этапы выполнения с соответствующими условиями перехода и списками активируемых/деактивируемых при переходе на этап объектов. Используются строковые ключи, соответствующие заданным в InteractiveBehaviour.

alt text

Отображаемые при наведении камеры названия объектов задаются в ScriptableObject DisplayedObjectNames.

alt text

После подготовки префаба набора интерактивных объектов, сценария и отображаемых названий созданные ассеты объединяются в ScriptableObject ScenarioPreferences.

alt text

ScenarioPreferences, добавленные в компонент TrainingPreferencesInitializer в сцене MainMenu, становятся доступными для запуска.

alt text

About

Scenario system for interactive manuals or puzzle games, made with Unity 2019.4

Resources

License

Stars

Watchers

Forks

Packages

No packages published