Skip to content

ResModule 资源系统

ResModule 是 SuperCore 对 YooAsset 的唯一运行时入口。它负责初始化和销毁 YooAsset、维护 Package 生命周期、建立全局 Address 路由,并向上层提供资源与场景的异步加载句柄。

业务代码只需要知道资源的全局唯一 Address。资源属于哪个 Package、当前使用哪个版本以及 Package 从哪里读取,都由资源系统处理。

子功能

用途

  • 按 Address 异步加载 SpriteGameObjectTextAsset、配置资产等 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.InitializeCreatePackage 或维护第二套 Package 字典。
  • 不要为资源加载传 Package Name;业务只传全局 Address。
  • 不提供同步加载。初始化和业务流程必须正确处理异步回调。
  • Package 操作同一时刻只允许一个,状态不匹配的调用会被拒绝。
  • BeginDeactivate() 后不能继续从该 Package 加载新资源。
  • Deactivate() 前必须显式释放全部 AssetHandle;场景要先由新的 Single 场景替换,并等待旧 SceneLoadHandle 控制器自动退休,不能调用不存在的场景 Release/Unload API。
  • Builtin/HotUpdate 启动组常驻到框架退出,不应由玩法代码停用或清缓存。
  • 按需 Package 的沙盒版本会跨玩法退出保留;只有明确的“清除下载内容”功能才调用 ClearCache()
  • Module.Get() 返回 null 说明 Module 缺失或生命周期顺序错误。调用方应停止当前流程,不应自动创建或静默绕过资源模块。

SuperCore 使用 MIT License 开源