1. 程式人生 > >解決unity匯入模型時出現多層UV的情況

解決unity匯入模型時出現多層UV的情況

最近在做專案優化的時候發現,遊戲中的模型佔用了很高的記憶體,然後就懷疑是美術在做模型的時候沒有把uv2,uv3,color等無用的通道去掉,然後就去問了美術,美術說她並沒有開啟這些通道,我也去max中檢查了一下也沒發現什麼異常的情況,在max中看確實只有一層uv但是在unity裡面就可以看見模型上面有很多層uv了,帶著這個問題去查了下資料,摸索著使用了下max,找到了如下的兩種解決方法。

方法一:

在max中進行設定把沒有必要的通道全部clear掉,具體的操作請看下面的截圖:

在這個介面中美術可以把相應的不需要的通道關掉,這樣在匯出的時候就不會附帶這些通道了,如果想去掉color通道的話直接去掉alpha通道就行。

方法二:

程式這邊進行處理,做一個工具,對每個匯入到unity中的模型程式碼中清除相應的通道,具體的程式碼如下

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);
         }
    }
}
以上就是解決匯入的模型存在多層UV的解決方法。

Tip:由於unity的光照貼圖會自動佔用uv2通道,而且你的專案中又使用的是動態載入光照貼圖的方式的話,最好不要在匯入模型的時候把UV2設定為null,如果你這樣做了有可能會導致光照貼圖顯示不出來的問題。具體請看http://m.blog.csdn.net/article/details?id=46330119我也是搜尋解決方案的時候無意中看到的,所以作為Tips提醒下