Skip to content

ProcedureModule 与 GameSystem

ProcedureModule 管理游戏的业务阶段切换,ProcedureBase 编排进入和退出,GameSystemBase 承载具体业务数据与逻辑。系统实例、实现绑定、作用域和初始化依赖统一配置在 ProcedureCfg,业务不在 Procedure 中手工 new 或等待一串系统。

子功能

设计思路

Procedure 只负责阶段编排,业务数据和逻辑留在 GameSystem。配置把系统组成、抽象实现、作用域和依赖集中到可视化画布,使“进入某玩法需要哪些系统、哪些能并行、谁依赖谁”可以直接审查。

Ready 状态把异步初始化纳入依赖图;退出屏障则把异步释放纳入流程切换。进入和退出两端都有明确成功边界,避免 Scene 或 Package 还没准备好就进入业务,也避免资源仍被 Entity/UI 持有时提前切换。

Blackboard 只在一个作用域内共享,避免把每个参数扩张成全局单例。Type/BindType 绑定让访问依赖抽象,但不引入隐藏字段注入,调用关系仍然可读。

注意事项

  • Procedure 不承载大量业务状态和数据处理;这些属于 GameSystem。
  • 每个 GameSystem 初始化必须调用 CompleteInitFailInit,失败后不能伪造成功回调。
  • Dependencies 是系统初始化关系的唯一配置来源,不要复制手工等待逻辑。
  • Long 初始化数据写在 OnInit,Short 初始化数据写在 OnPrepare;OnEnter 已经太晚。
  • 退出失败必须保持失败,不跳过资源释放继续切换。
  • Type、BindType 或程序集名称变化后,应打开 ProcedureCfg Refresh 并修正失效绑定。
  • 画布位置不影响调度;列表顺序也不是依赖顺序。
  • GameSystem.Get<T>() 只返回 Ready 实例,调用方仍应处理 null,不要把生命周期错误静默当成可选功能。

SuperCore 使用 MIT License 开源