Skip to content

引擎架构

该引擎在设计时考虑了以下原则: 场景独立性面向服务

独立于场景

虽然Unity设计推荐使用场景和预制体开发,但是在开发视觉小说时并不是很实际。

所有Naninovel系统并不直接和MonoBehaviour ↗ 关联,或依附于持久化 ↗GameObject ↗

cover

下列根物体会根据运行环境使用:

  • Naninovel<Runtime> 运行时(发布后和编辑器模式play mode运行时)
  • Naninovel<Editor> 编辑器模式(非play mode运行时)

所有必需的游戏对象都是在引擎初始化时创建的,在应用启动时(在刚进入Play mode或启动发布包后)自动通过RuntimeInitializeOnLoadMethod ↗ (运行时初始化onload方法)方法异步加载。你可以在配置菜单关闭 Initialize On Application Load 属性不在启动时初始化,在之后手动调用RuntimeInitializer (运行模式下) 或 EditorInitializer (编辑器模式下)来初始化。

cover

因为初始化时异步进行的,在调用 InitializeAsync() 方法或订阅静态事件Engine.OnInitialized 时使用使用 Async 和 Await 的异步编程 ↗

要完全禁用所有引擎系统并将其从内存中删除,请使用Engine.Destroy()静态方法。

面向服务

大多数引擎功能都是通过引擎服务实现的。引擎服务是IEngineService接口的实现,该接口会处理特定的功能,例如执行naninovel脚本,管理演出元素或保存加载游戏状态。

如果你想和引擎系统交互,大概率你是想使用某个引擎服务。你可以通过静态方法Engine.GetService<TService>()来获得相关引擎服务参考, TService 指你想要获取到的服务,比如,获取IScriptPlayer 服务:

csharp
var player = Engine.GetService<IScriptPlayer>();
player.Stop();

你可以在引擎服务 中找到现在可用的服务列表,和关于如何重写/添加自定义服务的信息。

高级概念

下面的UML图说明了引擎体系结构的高级概念。请注意,图中的所有类和接口名称都在Naninovel命名空间下。例如,要引用 Engine 类,请使用 Naninovel.Engine包含名称空间 ↗