2012-05-20

Unity 3D 產生 Texture Atlas

使用 Unity3D  內建的 Texture2D.PackTextures 功能來產生 Texture Atlas 圖片,下面是簡單的範例 :

Texture2D texAtlas =new Texture2D(2048, 2048);
Rect[] arrRc =texAtlas.PackTextures(arrTexSrc, 1);

arrTexSrc 是一個 Texture2D[] 型態的變數,texAtlas.PackTextures 將 arrTexSrc 矩陣裡所有的 Texutre 打包在同一張 Texture ( texAtlas ),並回傳所有被打包的圖片在 texAtlas 的 uv 座標位置 (  arrRc )。

arrTexSrc 的取得方式參考範例 :

Object[] arrFoundTex =Selection.GetFiltered(typeof(Texture2D), SelectionMode.DeepAssets);

將取得的 arrFoundTex 轉成 Texture2D[] 型態變數後丟給 PackTextures 使用。
底下的範例是將 Texture2D 另存成 PNG 格式圖檔 :

byte[] bytedata = texAtlas.EncodeToPNG();
if (bytedata != null)
    System.IO.File.WriteAllBytes(strPath, bytedata);

其中 strPath 是檔案路徑,取得的方式參考 :

string strPath =EditorUtility.SaveFilePanel("Save Texture Atlas...", Application.dataPath, Selection.activeObject.name, "png");

此外值得注意的是,欲打包的圖片在 TextureImporter 必須打開 Read/Write Enabled 設定 ( Texture Type 選擇  Advanced )