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