解決unity匯入模型時出現多層UV的情況
阿新 • • 發佈:2019-02-12
最近在做專案優化的時候發現,遊戲中的模型佔用了很高的記憶體,然後就懷疑是美術在做模型的時候沒有把uv2,uv3,color等無用的通道去掉,然後就去問了美術,美術說她並沒有開啟這些通道,我也去max中檢查了一下也沒發現什麼異常的情況,在max中看確實只有一層uv但是在unity裡面就可以看見模型上面有很多層uv了,帶著這個問題去查了下資料,摸索著使用了下max,找到了如下的兩種解決方法。
方法一:
在max中進行設定把沒有必要的通道全部clear掉,具體的操作請看下面的截圖:
在這個介面中美術可以把相應的不需要的通道關掉,這樣在匯出的時候就不會附帶這些通道了,如果想去掉color通道的話直接去掉alpha通道就行。
方法二:
程式這邊進行處理,做一個工具,對每個匯入到unity中的模型程式碼中清除相應的通道,具體的程式碼如下
以上就是解決匯入的模型存在多層UV的解決方法。public class ClearModelUV:AssetPostprocessor { //AssetPostprocessor這個類是unity自帶的,會在匯入資源的時候自動呼叫, //可以在這個類中實現對資源的處理。 //OnPostprocessModel這個函式在資源匯入到unity被存成prefabs最後階段被呼叫 //傳入的gameobject就是被匯入的資源的Gameobject //這個類還有一個OnPreprocessModel的方法會比這個方法提前點呼叫。具體用法 //和前者差不多 void OnPostprocessModel(GameObject rImaportModel) { this.ClearMeshUVAndColorChannel(rImaportModel); } private void ClearMeshUVAndColorChannel(GameObject rImportModel) { List<Vector2> rNewUV = null; List<Color32> rNewColor = null; var rFilters= rImportModel.GetComponentsInChildren<MeshFilter>(); for (int filter_index = 0; filter_index < rFilters.Length; filter_index++) { rFilters[filter_index].sharedMesh.SetColors(rNewColor); rFilters[filter_index].sharedMesh.SetUVs(1, rNewUV); rFilters[filter_index].sharedMesh.SetUVs(2, rNewUV); rFilters[filter_index].sharedMesh.SetUVs(3, rNewUV); } } }
Tip:由於unity的光照貼圖會自動佔用uv2通道,而且你的專案中又使用的是動態載入光照貼圖的方式的話,最好不要在匯入模型的時候把UV2設定為null,如果你這樣做了有可能會導致光照貼圖顯示不出來的問題。具體請看http://m.blog.csdn.net/article/details?id=46330119我也是搜尋解決方案的時候無意中看到的,所以作為Tips提醒下