主题
管理器层(Managers)
Assets/RocPlay/Managers 中的类型实现 IRocManager(RocPlay.Core):在 IRocLifecycle 上约定 Init / Start / Stop / Dispose,并继承 IDisposable。管理器面向 UI、音频、场景、输入、数据、对象池 等与运行时编排、表现强相关的领域门面;与 IRocService 基础设施分工不同——服务偏「协议与通用能力」,管理器偏「游戏内聚合流程与 Unity 侧协作」。
与基础服务的关系
| 维度 | IRocService | IRocManager |
|---|---|---|
| 典型职责 | TCP、存储、资源字节流、消息队列、底层池算法等 | 开面板、切场景、总线混音、键鼠封装、存档门面、GameObject 池编排等 |
| 引导顺序 | 先于管理器完成 Init / Start | 后于服务(见 基础服务 · 与引导顺序) |
| 获取方式 | 同为 RocCenter.Resolve<接口>() | 同上 |
主程序集内 没有「资源管理器」接口:资源加载统一走 IRocResourceService(见 Resource)。IRocAudioManager、RocUIPanelFactory 等会在运行时依赖已注册的 IRocResourceService 实现。
主程序集内置管理器索引
以下默认实现均带 [RocImplementation(typeof(接口), Priority = 0)];更高 Priority 的可替换实现见扩展或业务工程。
| # | 接口 | 默认实现 | 分册 |
|---|---|---|---|
| 1 | IRocUIManager | RocUIManager | UI(配置、API、RocUI、示例、面板) |
| 2 | IRocAudioManager | RocAudioManager | 音频管理器(总线与播放、RocAudio 静态门面、示例) |
| 3 | IRocSceneManager | RocSceneManager | 场景管理器(加载与场景栈、RocScene 静态门面、示例) |
| 4 | IRocInputManager | RocInputManager | 输入管理器(传统输入与扩展分工、RocInput 静态门面、示例) |
| 5 | IRocDataManager | RocDataManager | 数据管理器(存取与加密边界、RocData 静态门面、示例) |
| 6 | IRocPoolManager | RocPoolManager | 对象池管理器(注册与取还策略、RocPool 静态门面、与对象池服务、高频场景决策、示例) |
命名空间前缀均为 RocPlay.Managers.<子域>(如 RocPlay.Managers.UI)。
启动依赖(RocDependsOn)
部分管理器在实现类型上标注 [RocDependsOn(typeof(...))],供 RocInitPlanner 在启动期把依赖类型纳入规划,避免解析顺序问题:
RocDataManager→IRocStorageServiceRocPoolManager→IRocPoolServiceRocAudioManager→IRocResourceService
其余管理器以构造注入或内部 Resolve 使用服务时,仍须保证对应服务已在容器中注册。
扩展与业务中的 IRocManager
以下 不在 Assets/RocPlay/Managers 主目录,但同样实现 IRocManager,按需引用独立 asmdef:
- 扩展:如
IRocConfigManager、IRocActionInputManager、IRocResourceManifestManager、ECS/ComponentSystem 各 Manager 等 → 横向拓展 - 业务插件:如
IRocChatManager、IRocRedDotManager等 → 业务插件
插件之间不硬引用;跨模块协作优先 RocEventBus 与接口解析。
使用方式(共性)
csharp
var panel = await RocUI.OpenPanelAsync("MyPanel", RocUILayer.Normal);静态门面与实例访问也都在主命名空间 RocPlay 下提供,统一模式是:
RocUI.ManagerInstanceRocAudio.ManagerInstanceRocScene.ManagerInstanceRocInput.ManagerInstanceRocData.ManagerInstanceRocPool.ManagerInstance
这类静态门面本质上仍是 RocCenter.Resolve<接口>() 的语法糖;需要扩展能力或调试时,直接取 ManagerInstance 即可。
自定义管理器:实现 IRocManager(含生命周期与 Dispose),并标注 [RocImplementation(typeof(IMyManager))]。管理器 不是 IRocPlugin,无框架统一的 OnUpdate;每帧逻辑放在插件、桥接 MonoBehaviour 或实现内部按需处理。
代码对照
Assets/RocPlay/Managers/Assets/RocPlay/README.md中「管理器层」清单
下一步
- 按需阅读本分册 UI / Audio / Scene / Input / Data / Pool。
- 资源清单、版本与批量预载:
IRocResourceManifestManager→ 模块资源编排。