跳到主要内容

框架配置与资源 API 开发指南

固定源 b29c7b21b93dbb393f9855841e28b43f72ae14ae 的 package 声明 2.8.45、Unity 2022.3。模板另锁 2.8.38,本文所列资源方法不能视为该旧版本保证。本文覆盖 README、配置生成 C# 和 ResourceComponent,不是完整热更新/Procedure 教程,也没有对应的运行通过证据。

配置、场景和运行管理器的连接​

Project Settings → WJFramework 的生成入口会把 editor 设置转换为多个 Runtime .asset、LaunchInfo 和场景组件引用。该动作会保存资产与场景;生成器依赖固定启动场景结构,详细影响见已有项目接入指南。F1 F2

ResourceComponent.Start() 按顺序获取 BaseComponent、EventComponent 和 IResourceManager;缺任何一个时记录 Fatal 并返回。随后从 Resources/Configs/LaunchInfo 读取 PlayMode,以 m_Settings.AssetPackages 设置资源包,设置 StreamingAssets 只读路径;TemporaryCache 使用 temporaryCachePath,否则使用 persistentDataPath。未指定 InstanceRoot 时创建资源实例根。F3

源码对 LaunchInfo、m_Settings 的这段读取没有相同的空值返回保护。消费者应提供真实配置和组件接线;不要因为 AssetPackages、LatestVersionInfo 等 public getter 可调用就假定 Start 已成功或 manager 已准备。这里只描述读取到的分支,未复现实际异常。

已读的资源加载接口​

以下均为 UnityGameFramework.Runtime.ResourceComponent 的接口。Component 大多转调 IResourceManager,底层包初始化、缓存和下载实现未取得。F3

API已读行为与使用责任
HasAsset(string assetName)转调 manager 的存在性检查,不等于加载完成
LoadAsset(string, LoadAssetCallbacks) 及 Type/priority/userData 重载回调式异步加载;最终入口遇到空名称或非 Assets/ 开头名称时只记录错误并返回,不调用失败回调,调用者不能无限等待该回调
LoadAssetAsync<T>(string, int) / 增加 packageName 的重载返回 YooAsset AssetHandle;消费者保存生命周期并在实际完成后消费
LoadAssetAsync(string, Type, int) / 增加 packageName 的重载非泛型句柄加载,转调 manager
LoadAssetSync<T>(string)同步加载,返回资源对象;不要把它描述为无阻塞异步路径
UnloadAsset(object)转调 manager;源码注释约定配平加载,已自行 Release 的句柄由底层跳过,当前未取得底层实现来独立核实该保证
GetResourcePackage(string assetName)返回 manager 对该 assetName 定位的 ResourcePackage;参数是资产名,不是包名

组件的回调式入口有 Assets/ 名称检查,句柄/同步入口未在该组件重复同一检查;底层是否采用相同规则需看 IResourceManager 实现。不要把所有 overload 的异常路径写成一致。

创建对象、加载资源和持有句柄分开记录所有者:谁请求、谁取消场景用途、谁保存资源对象、谁释放句柄。Component 没有在这些方法中替调用方提供玩法生命周期;不把页面代码片段当已编译示例。准确的 AssetHandle 完成/失败消费方式还需固定 YooAsset 依赖及调用方源码。

清理的时序与配对​

默认最小/最大无用资源清理间隔为 60/300 秒,Update 累加 unscaledDeltaTime。周期清理到期或预订达到最小间隔时可发起 Resources.UnloadUnusedAssets;同时只持有一个已发起的 AsyncOperation。F3

  • PausePeriodicUnloadUnusedAssets() 增加暂停层数;ResumePeriodicUnloadUnusedAssets() 每次减少一层,没有暂停时返回 false。消费者应成对恢复,不能用一次 Resume 清除全部层数。
  • UnloadUnusedAssets(bool performGCCollect) 是预订请求,不是立即卸载。
  • ForceUnloadUnusedAssets(bool performGCCollect) 设置强制请求;即使周期暂停,下一次满足“没有正在清理”的 Update 仍可执行。
  • 暂停不取消已发起的清理,不阻断强制请求;计时和预订保留,恢复后可能很快清理。
  • 当清理完成且 GC 标记为 true,才调用 GC.Collect。传 false 不会在这些方法中撤销之前已设置的 true 标记。

这些方法管理无用资源清理,不替代加载句柄/对象的生命周期配平。

版本更新接口的责任​

UpdateVersionList(LatestVersionInfo)、CheckResources(...)、UpdateResources(...)、StopUpdateResources()、资源组查询均转调 manager。产品的版本服务、CDN、网络错误、缓存策略、更新 UI 和完成/失败 Procedure 不在已读 Component 中。不要把调用顺序列表写成完整可运行热更方案。

固定 README 描述 App 热更 DLL WJFramework.Runtime、WJGame.AppMain,Game WJGame.GameMain,以及 App/Game AOT/Hotfix 收集目录和 AOTDll 标签;实际程序集闭包、HybridCLR 元数据与资源输出需要同版本 source 和目标平台证据。F1

已知版本与文档限制​

框架 2.8.45 package 直接依赖 UniTask 2.5.10、YooAsset 2.3.17013、HybridCLR 8.5.1,并声明若干 Samples。样例条目存在不能证明当前参考子集中具备样例,也不能把 SkillTest/协议测试资产当正式产品教程。F4

README 指向飞书材料;本稿未读取或复制其文字、图片。框架文档“逐渐完善中”不构成缺失启动示例的证据替代。模板 2.8.38 与这里 2.8.45 的差异、release tarball 来源和跨包消费者组合仍未确认。

下一步需要的具体源码​

需要同 SHA 的 IResourceManager 实现及实际 manager、ResourceComponentInfo、LaunchInfo、WJFrameworkSettings、AppLauncher、HotfixComponent 和更新 Procedure,才能补写完整启动/更新失败路径;需要导入菜单实现及场景,才能证明配置步骤可套入项目;需要 2.8.38 同路径源码、CHANGELOG 与两版本 API diff,才能说明升级差异。实际示例需对应消费者源码、包来源、平台和精确 head 外部运行回执。本次不凭文档或 API 声明补成已运行示例。

固定来源​

以下是内部固定来源,需要原仓内网和账号权限,公网读者不能保证可访问。链接保留仓库身份、完整 SHA 和相对路径供定位,不授予访问或资源转用权限;正文已独立说明所需字段与使用边界。

相关指南​

阅读路径:已有项目 · 安装 · 编辑器配置 · 运行时接线 · API入口 · 版本基线