Архитектура движка
Движок разработан с учетом следующих принципов: независимость от сцен и ориентированность на сервисы.
Независимость от сцен
Дизайн Unity продвигает использование сцен и композиции префабов, что не очень практично при разработке визуальных новелл.
Все системы Naninovel либо не связаны непосредственно с MonoBehaviour, либо прикреплены к постоянному корневому GameObject.
В зависимости от среды используются следующие корневые объекты:
– Naninovel<Runtime>
для воспроизведения (сборки и режим воспроизведения редактора); – Naninovel<Editor>
для редактора (вне режима воспроизведения).
Все необходимые игровые объекты создаются при инициализации движка, которая выполняется автоматически и асинхронно при запуске приложения (сразу после входа в режим воспроизведения или запуска сборки) с помощью метода RuntimeInitializeOnLoadMethod. Вы можете изменить это поведение, отключив свойство Initialize On Application Load
в конфигурации движка и вручную вызвав инициализацию с помощью классов RuntimeInitializer
(для среды выполнения) или EditorInitializer
(для редактора).
Поскольку процесс инициализации является асинхронным, используйте либо подход async-await при вызове метода InitializeAsync()
, либо используйте статическое событие Engine.OnInitialized
.
Чтобы полностью отключить и удалить из памяти все системы движка, используйте статический метод Engine.Destroy()
.
Ориентированность на сервисы
Большинство функций движка реализуются через его сервисы. Сервис движка – это реализация интерфейса IEngineService
, который исполняет конкретную работу – например, выполнение сценариев Naninovel, управление акторами или сохранение-загрузка состояния игры.
В случае, если вы хотите взаимодействовать с системой движка, вы, скорее всего, захотите использовать сервисы движка. Вы можете получить ссылку на сервис движка, используя статический метод Engine.GetService<TService>()
, где TService
- это тип (интерфейс) сервиса, на который вы хотите сослаться; например, чтобы получить сервис IScriptPlayer
:
var player = Engine.GetService<IScriptPlayer>();
player.Stop();
Список всех доступных в настоящее время сервисов движка и информацию о том, как переопределить/добавить пользовательские сервисы, можно найти в руководстве по сервисам движка.
Высокоуровневая концепция
Следующая диаграмма UML иллюстрирует высокоуровневую концепцию архитектуры движка. Обратите внимание, что все имена классов и интерфейсов на диаграмме организованы в пространстве имён Naninovel
. Например, чтобы сослаться на класс Engine
, используйте Naninovel.Engine
или включите пространство имён.