Unity中提供的AssetBundle是资源管理中很重要的一部分,可以用它来实现游戏发布后的各种资源动态更新功能。其中的生成参数常用的有两个BuildAssetBundleOptions.CollectDependencies,BuildAssetBundleOptions.CompleteAssets,两者的详细差异可以参加Unity的文档。
【AssetBundle中的引用丢失】其中的CollectDependencies会track当前资源所需要的全部依赖资源,并也会将其打入到对应的包中,比如对于一个prefab来说,其所使用的.fbx模型、贴图、动画文件以及Atlas等等都会进入到生成包中。而CompleteAssets则同样会track引用关系,但是却不会包入相应的资源。
一般情况下,为了减少包的大小可能中需要保留引用关系来生成资源包,这就需要使用CompleteAssets参数。但是对于prefab上包含的脚本和shader等则会在使用此参数打出的包中丢失依赖关系,会出现找不到对应的引用对象,这个查了下可能是目前Unity版本中的一个bug。一个可用的解决方法就是将此包打两遍:
- 第一次使用CollectDependencies生成中间包,然后将其PushAssetDependencies,作为第二次打包的依赖包。
- 然后再使用CompleteAssets进行最终的打包,这样该包中的所有依赖关系都从第一个完整包中继承过来,也就不会出现引用丢失的情况了。

本文介绍了Unity AssetBundle在生成时遇到的引用丢失问题,以及使用CollectDependencies和CompleteAssets参数的差异。为了解决CompleteAssets导致的引用丢失,建议采用两次打包的方法。同时,分享了如何通过命令行自动化生成AssetBundle,以及Unity3.0 NGUI中UILabel的内存占用问题,指出当显示过多文字时会导致FontMaterial内存膨胀,提出升级NGUI或限制UILabel显示长度的解决方案。
最低0.47元/天 解锁文章
603

被折叠的 条评论
为什么被折叠?



