之前遇到了一件事情就是打包安卓的ab后,unity在editor啟動下,加載出來的abshader丟失,其實發布安卓后運行是正常的,當時還糾結了半天,還寫了個重新賦值的腳本
下面是unity開發的一些注意事項
=======================================================================================
1、我們一般把資源和代碼作為兩個工程。資源工程導出assetbundle供代碼工程使用。這么做主要是防止資源過多導致代碼工程啟動速度慢,影響開發效率。
2、盡量避免使用Resources文件夾。這個文件夾就相當於一個系統默認的AssetBundle。只不過不能增量更新。它會嚴重影響打包速度。我們把資源從Resources移出來后,打包時間從半個多小時,減少到2~5分鍾。
2、Shader都要加入到Proejct Settings--Graphics--Always Included Shaders中。否則代碼工程中沒有使用到的Shader可能會被裁剪,導致的問題是Shader丟失。
3、Shader要打包到一個AssetBundle中,即Shader需要指定一個AssetBundle包名。如果Shader沒有指定的話,那么每個AB包都會包含這個Shader。一方面造成資源浪費。另一方面當Shader被修改的時候,所有的模型都需要重新導出。另外由於我們代碼工程里面肯定也維護了一份Shader,模型實際使用的Shader是它自己包內的,不是代碼工程的Shader。
這里要注意,2和3必須都要做。之前我認為加入到Always Included Shaders中,Unity打包ab的時候就不會打包Shader。然而並不是這樣。這個列表只負責預先加載Shader。防止資源被裁剪,以及臨時加載造成的卡頓。
4、Unity打包后的Shader是平台相關的,Editor下是無法直接使用的。所以Editor下加載AB包中的模型或特效會出現Shader錯誤。這個時候需要重新指定一下Shader,即遍歷所有的Render把Material的Shader重新附下值。