本次测试包含对AssetDatabase.GetDependencies
和EditorUtility.CollectDependencies
这两个获取资源的依赖资源的 API 的测试,以及对于meta
残留对打AssetBundle
的影响。
输入资源路径,例如Assets/Material/demo.mat
,以路径形式返回该资源依赖的资源列表,例如Assets/Texture/demo.jpg
。
这个 API 返回的结果是“错误”的,也就是带残留的。比如某个材质,原本的shader
引用了4个纹理,然后切换其shader
为新的shader
使之只引用一个纹理,这时AssetDatabase.GetDependencies
返回的结果还是4个纹理。
输入资源对象(UnityEngine.Object),以对象数组的形式返回该资源依赖的资源列表。
这个 API 返回的结果是正确的,只包含当前真正引用的对象。如果材质的meta
中有残留的纹理引用也不会影响结果。
实际测试的结果是,meta
残留不会影响打包生成的AssetBundle
文件。但是如果使用了新的Unity AssetBundle
系统,那么打包生成的Manifest
里面记录的依赖是错的。
使用AssetDatabase.GetDependencies
可以检测出来meta
残留的资源引用,而EditorUtility.CollectDependencies
得到的是真实引用的资源。
如果有meta
残留,则Unity5
新的打包系统生成的AssetBundle
文件是对的,但是记录依赖性的Manifest
文件是错的的。
目前 FF 项目组使用的打包机制不受meta
残留的影响。但是写工具把meta
残留刷对也没有坏处。