本期主要整理一些在AssetBundle打包中碰到的一些細節(jié)上的問題。
可以發(fā)現(xiàn)AssetBundle和一些Unity提供的配置選項不兼容導(dǎo)致碰到一些奇怪的問題。
Mesh配置
在FBX的Inspector界面有很多可配置項
發(fā)現(xiàn) Read/Write Enabled的勾取消掉的時候,如果發(fā)生Mesh的訪問操作,會直接導(dǎo)致Crash。一般特效帶Mesh的會發(fā)生這種情況。
Optimize Mesh會導(dǎo)致多余的Mesh被干掉,造成表現(xiàn)出錯。
上面提到的這兩點,如果資源是在Resources目錄下被打包則不會出錯。
IOS相關(guān)
Managed code stripping & Engine code stripping,Engine code stripping 默認開啟,當把所有的資源都打成Asset Bundle以后Unity會認為這是一個空包,然后大部分Class都被strip,當加載AssetBundle訪問的時候直接Crash。
Shader相關(guān)
shader stripping 默認的Lightmap modes & Fog modes都是Automatic。這樣發(fā)現(xiàn)最后打完Asset Bundle發(fā)現(xiàn)表現(xiàn)上烘焙的光照表現(xiàn)不正確,霧效也丟失了。需要配置為Manual然后根據(jù)實際情況勾選相應(yīng)的Shader,比如Baked Non-Directional。
加載相關(guān)
當發(fā)起一個AssetBundle的LoadAsync異步請求的時候,調(diào)用Resources.UnloadUnusedAssets會導(dǎo)致這個AssetBundle加載的資源被釋放掉,5.3.6版本存在 5.3.7已經(jīng)修復(fù) 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)
總結(jié)
AssetBundle的使用需要主要注意很多細節(jié),總體來看和優(yōu)化有關(guān),這樣類似的問題定位上會簡單很多。