ResModule 资源系统
ResModule 是 SuperCore 对 YooAsset 的唯一运行时入口。它负责初始化和销毁 YooAsset、维护 Package 生命周期、建立全局 Address 路由,并向上层提供资源与场景的异步加载句柄。
业务代码只需要知道资源的全局唯一 Address。资源属于哪个 Package、当前使用哪个版本以及 Package 从哪里读取,都由资源系统处理。
子功能
用途
- 按 Address 异步加载
Sprite、GameObject、TextAsset、配置资产等 Unity 资源。 - 以 Single 模式异步加载业务场景,并在新场景激活后替换旧场景。
- 管理 Builtin、HotUpdate 和按需玩法 Package。
- 检查、下载、激活或停用 Package 版本。
- 对资源引用计数,并在业务释放句柄后卸载资源。
设计思路与生命周期
资源系统刻意分离三种对象:
ResourcePackageHandle:按 Package Name 长期稳定,负责版本和 Package 生命周期。AssetHandle:按资源加载引用计数,可在槽位复用时通过 id/version 防止旧句柄误命中。SceneLoadHandle:只描述当前场景加载进度和结果。
启动顺序为:
text
SuperCore 读取固定配置与当前平台最低版本
→ ResModule 读取 Cfg_Res
→ YooAssets.Initialize(唯一入口)
→ 依次准备并激活 Builtin 启动组
→ 建立 Builtin 全局 Address
→ 加载并初始化 GlobalCfg
→ ResModule.CompleteInit
→ 后续 Debug、Event、HotUpdate 等 Module框架退出时顺序相反:业务系统和其他 Module 先释放资源,最后由 ResModule 注销 Address、销毁所有 Package Handle、释放固定配置并调用 YooAssets.Destroy()。
注意事项与限制
- 不要在业务代码中直接调用
YooAssets.Initialize、CreatePackage或维护第二套 Package 字典。 - 不要为资源加载传 Package Name;业务只传全局 Address。
- 不提供同步加载。初始化和业务流程必须正确处理异步回调。
- Package 操作同一时刻只允许一个,状态不匹配的调用会被拒绝。
BeginDeactivate()后不能继续从该 Package 加载新资源。Deactivate()前必须显式释放全部AssetHandle;场景要先由新的 Single 场景替换,并等待旧SceneLoadHandle控制器自动退休,不能调用不存在的场景 Release/Unload API。- Builtin/HotUpdate 启动组常驻到框架退出,不应由玩法代码停用或清缓存。
- 按需 Package 的沙盒版本会跨玩法退出保留;只有明确的“清除下载内容”功能才调用
ClearCache()。 Module.Get()返回null说明 Module 缺失或生命周期顺序错误。调用方应停止当前流程,不应自动创建或静默绕过资源模块。
