本期主要整理一些在AssetBundle打包中碰到的一些细节上的问题。
可以发现AssetBundle和一些Unity提供的配置选项不兼容导致碰到一些奇怪的问题。
Mesh配置
在FBX的Inspector界面有很多可配置项
发现 Read/Write Enabled的勾取消掉的时候,如果发生Mesh的访问操作,会直接导致Crash。一般特效带Mesh的会发生这种情况。
Optimize Mesh会导致多余的Mesh被干掉,造成表现出错。
上面提到的这两点,如果资源是在Resources目录下被打包则不会出错。
IOS相关
Managed code stripping & Engine code stripping,Engine code stripping 默认开启,当把所有的资源都打成Asset Bundle以后Unity会认为这是一个空包,然后大部分Class都被strip,当加载AssetBundle访问的时候直接Crash。
Shader相关
shader stripping 默认的Lightmap modes & Fog modes都是Automatic。这样发现最后打完Asset Bundle发现表现上烘焙的光照表现不正确,雾效也丢失了。需要配置为Manual然后根据实际情况勾选相应的Shader,比如Baked Non-Directional。
加载相关
当发起一个AssetBundle的LoadAsync异步请求的时候,调用Resources.UnloadUnusedAssets会导致这个AssetBundle加载的资源被释放掉,5.3.6版本存在 5.3.7已经修复 5.3.7 What's News里面有提到
AssetBundles: Fixed an issue where calling Resources.UnloadUnusedAssets while loading an AssetBundle with AssetBundleRequest.LoadAssetAsync caused an error &and stopped the asset from being loaded properly (803481, 807275)
总结
AssetBundle的使用需要主要注意很多细节,总体来看和优化有关,这样类似的问题定位上会简单很多。