自2022年9月6日起,本文档站不再更新内容,相关文档已迁移至全新“抖音开放平台”前往

编辑器工具

一、扫描

1.选择扫描范围

通过选定资源的搜索范围,确定需要处理的资源范围。

对于一般的项目,最常用的是 Resources And Scenes In Build, 代表所有被 EditorBuildSettings 包含的 Scene 和 Resources 下的所用资源。即所有最终被打进 APK 包的资源。

  • Single Asset 选项:可以支持用户对单个 Asset 或者单个 Folder 进行资源扫描。
  • Addressable Scenes 选项:支持用户对所有已被 AA 化的场景进行资源扫描。

扫描的结果将被显示到下面的列表中,两个区域分别表示直接引用,和间接引用的资源。

2.选择处理对象的类型

3.选择处理资源的类型

二、转化

在选定完扫描对象以及处理资源的类型以后,点击转化。

工具会逐个遍历对象 Asset,分析依赖资源。

如果依赖的资源包含需要处理的类型,则会生成一份替代资源在工程目录下{ProjectDir}/StarkProxyData 下,并在引用到该资源的 GameObject 上挂上 AssetProxyContainer 组件,用于记录运行时需要载入的高清资源的 AssetReference。

三、打包

远端资源的打包,依赖于 StarkMini 对 Addressable 的封装。

在前一步转化工程中,所有被处理的资源都已经被勾选了 Addressable 选项,并默认添加到 Addressable 配置的 Default Group 中。

用户可以根据自己的需求,建立分组,划分资源,设置 CDN 地址,构建 AA 包等。这一部分具体案例可以参考 StarkMini 的文档。

四、Editor 下调试

1.构建 AA 资源,参照上一部分打包,注意一定要在原资源情况下打包。

如果在 ChangeToProxy 后打包,打入的都将是低清资源。此时需要先点击工具菜单中的 RevertToOrigin 选项。

2.点击 ChangeToProxy,所有处理过的资源会被替换成 dummy 资源

3.AA 的 playmode 运行模式设置成 3,因为 AssetDatabase 下的资源已被替换成 dummy 资源,无法使用前两种模式。

4.运行游戏,即可在编辑器下测试。

5.恢复资源,点击 RevertToOrigin 菜单项恢复原始资源。

五、构建

构建过程中,工具通过 Prebuild,会自动完成移出原始资源,拷贝替代资源的操作。等价于 ChangeToProxy。

构建完成后,工具通过 Postbuild 脚本,自动完成删除替代资源,移回原始资源的操作。等价于 RevertToProxy。

因此,如果不需要在编辑器中调试程序,可以无需手动操作替换和恢复资源。

如需停掉每次构建时的自动资源替换,可以将 AssetDataConfig 中的 AutoConvert 去掉。

六、运行时工作原理

场景及 Prefab 资源中记录数据

AssetProxyContainer

继承自 MonoBehavior,在所有产生了 AssetProxyData 的 GameObject 上挂载。内部记录了此 GameObject 处理产生的 AssetProxyData 的 List。

程序运行时,会在 Awake 和 BecameVisible 中触发下载替换正式资源的逻辑。

AssetProxyData

代表单个代理资源处理的数据结构

AssetProxyType type:枚举类型,代表当前数据类型,取决于原资源的资源类型。

AssetReference reference:原资源 AA 化后的引用地址

Object target:引用原资源的对象,一般是 Component,也有特殊如 MaterialProxy,对象为 Meterial。

string field:具体引用到原资源的 field 或 property path

string sourceAsset:执行替换操作后将替代资源的名称记录到 AssetProxyData 中,用于最终确定是否需要在运行时执行恢复操作,对象当前引用的资源名若与此不相同,则不执行恢复操作。

七、动态加载资源的处理

Resources.Load

在运行时会记录所有被 Resources.Load 加载的资源被赋值的控件和属性,会触发 Callback 通知 Analyser 运行时库的资源管理器,利用加载资源的路径,可以找到对应的高精度资源。开始下载高精度资源,并在完成时会替换控件的属性。

ScriptableObject 中的资源引用

当 ScriptableObject 中引用的低精度资源被赋值给一些对象时,会触发 Callback,通知 Analyser 运行时库的资源管理器,利用低精度资源的 Object Name,可以找到对应的高精度资源。开始下载高精度资源,并在完成时会替换控件的属性。

IL 注入

注入解决的问题如上图所示

某个配置中的贴图 texA1 被赋值到某个控件的某个属性,IL 注入功能会在其后插入一行代码,通知 StarkAssetAnalyser 的资源管理器,如果检测到有对应的高清资源,则会下载并替换到控件的属性中。

同样的,通过 Resources.Load 的资源被赋值后,也会通知 StarkAssetAnalyser 的资源管理器。

以上功能都通过 IL 自动注入实现,无需用户手动编码添加回调函数,工具会在每次 Unity 编译脚本完成时进行一次注入。

点击纠错
该文档是否对你的开发有所帮助?
有帮助
没帮助
该文档是否对你的开发有所帮助?
有帮助
没帮助