纳金网

标题: AssetBundle中的一个坑-DeterministicAssetBundle与文件名 [打印本页]

作者: 狂风大尉    时间: 2014-11-24 01:43
标题: AssetBundle中的一个坑-DeterministicAssetBundle与文件名

记录一下做动态更新时遇到的AssetBundle的一个坑:
为了确保AssetBundle打出来的资源具有唯一性,做两方面考虑:
1 在做Assetbunlde包依赖时,必须这么选择(PushAssetDependencies,PopAssetDependencies)
2 在资源更新时,只有确保资源不会每次Build时都会产生不同的MD5值,才能确保资源的增量更新BuildPipeline.BuildAssetBundle  在build的时候添加一个选项 |BuildAssetBundleOptions.DeterministicAssetBundle 这样就能确保这份资源的唯一性。


遇到的问题:
DA目录下面的FA文件名为x.prefab,DB目录下面的FB文件名字也叫x.prefab。。在build Asset包的时候在StreamingAssets目录下面建立了DA和DB目录。

打包的时候FA文件打成了x.assetbundle放在DA目录下面;  FB达成了x.AssetBundle 放在DB目录下面,根据常理知识:在不同的文件系统下面的两个文件应该不会冲突的。

然而在用www加载的时候:
www 先加载 DA下面的 x.assetbundle,(没有问题)
www 再加载DB下面的x.assetbundle(提示:can't be loaded because another asset bundle with the same files are already)
(多么的让人恼火啊,可能是我没有找到相关的文献,我翻了很多的文章也没有找到类似的问题和解决办法,如果有的话,也希望有人帮忙指一下~~)

解决办法:
如果不想破坏目录的结构也可保留但是要确保文件的唯一性,将DA下的x.assetbundle 更名为 da_x.assetbundle;DB下的x.assetbundle更名为:db_x.assetbundle 在执行的时候就不会有问题了。
(我尝试过,在build完之后 手动的把x文件改名,结果还是报错,这应该是build的时候在assetbundle文件里写入了文件名字的信息,就算手动改名文件内的名称也是不会改变的)


作者: hyui    时间: 2014-11-24 02:27
Great share !!
作者: Mr.Fair    时间: 2014-11-24 13:19

Great share !!
作者: suke    时间: 2014-11-24 15:23
楼主可能忽略了DeterministicAssetBundle的另一个用途,当用pop/push打包时,假如A和B场景都依赖C资源,那如果打出来的资源在同一个目录的话,前者打包出来的C就会被后者所覆盖,如果不加此选项的话,就会导致A场景丢失C资源。加上后前后都是一个id,所以覆盖后仍然Ok。

当然,我认为的解决办法是:尽量资源不要重名,可以根据用途加个前缀。
作者: 我不再年轻    时间: 2014-11-25 20:44
做网游必须学习了, 多谢!




欢迎光临 纳金网 (http://c-www.narkii.com/club/) Powered by Discuz! X2.5