讓我們來匯出unity3d中的mainTexture貼圖轉換儲存為png
阿新 • • 發佈:2019-01-08
有這麼一個需求,我們知道unity3d的模型一般用fbx格式進行匯入的。
但fbx裡面所引用的貼圖檔案格式那就是很多,比如TGA,DDS,BMP,等等,各式各樣。
我的想法很簡單,就是把這些貼圖匯出成PNG就行了。
大家覺得會說,你用其它軟體進行批量轉換不就好了?這個可以有!推薦XnView給大家使用!
不過,這不是本篇文章的重點,我就是想用unity3d來實現轉換。
查了一下API,發現Texture2D有一個EncodeToPNG()功能,這就是我想要的!
步驟如下,先找到Material。Material上預設會有一個mainTexture,我們的主材質貼圖。
接下來就是獲取編碼然後儲存即可!確實很簡單呀
其實寫這篇文章前,也查閱了網上其它例子,都是實現全屏截圖的功能。
本文雖略有不同,但思路都大同小異。給有需要的朋友們參考~
獻上關鍵unity3d程式碼C#版本:
public static bool saveMainTextureToPng (string filePath, Material mt) { Texture tex = mt.mainTexture; if (tex.GetType () != typeof(Texture2D)) { return false; } Texture2D savedTexture = (Texture2D)tex; try { Texture2D newTexture = new Texture2D (savedTexture.width, savedTexture.height, TextureFormat.RGBA32, false); newTexture.SetPixels (0, 0, savedTexture.width, savedTexture.height, savedTexture.GetPixels ()); newTexture.Apply (); byte[] bytes = newTexture.EncodeToPNG (); if (bytes != null && bytes.Length > 0) { File.WriteAllBytes (filePath, bytes); Debug.Log ("轉換PNG成功:" + AssetDatabase.GetAssetPath (mt.mainTexture) + "-->" + savedTexture.format.ToString ()); } } catch (IOException ex) { Debug.Log ("轉換PNG失敗:" + AssetDatabase.GetAssetPath (mt.mainTexture)); return false; } return true; }