1. 程式人生 > >讓我們來匯出unity3d中的mainTexture貼圖轉換儲存為png

讓我們來匯出unity3d中的mainTexture貼圖轉換儲存為png

有這麼一個需求,我們知道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;
		}