1. 程式人生 > >利用Unity自帶的合圖切割功能將合圖切割成子圖

利用Unity自帶的合圖切割功能將合圖切割成子圖

int 方便 無法 object idt http eal data- 像素

轉載的,牛人無處不在,我還太渺小

雖然目前網上具有切割合圖功能的工具不少,但大部分都是自動切割或者根據plist之類的合圖文件切割的,

這種切割往往不可自己微調或者很難維調,導致效果不理想。

今天逛貼吧發現了一位網友寫的切割合圖插件很不錯,就分享下,

利用的是Unity自帶的合圖切割功能,原生的切割功能雖然很方便而且很容易微調,但無法導出,這個網友將它們導出了,

來自:百度Unity3D貼吧的13471713164

鏈接:http://tieba.baidu.com/p/3217039693

技術分享

技術分享

 1 using UnityEngine;
 2 using UnityEditor;
3 using System.Collections.Generic; 4 using System.IO; 5 6 /// <summary> 7 /// 可以將Unity裏自帶的合圖切割功能切割後的合圖導出為子圖 8 /// 使用方法: 9 /// 1.先導入Png合圖 10 /// 2.圖片Texture Type要選擇Advanced並且下面那個Read/Wite Enable要打勾 11 /// 3.將圖片格式設置為合圖“mult”,並點擊“Editor”開始切割合圖 12 /// 4.切割完畢後先選中該張圖片,點擊Process to Sprites後便可以導出 13 /// </summary>
14 public static class SpriteSheetPackerImport 15 { 16 [MenuItem("Assets/Sprite Sheet Packer/Process to Sprites")] 17 static void ProcessToSprite() 18 { 19 Texture2D image = Selection.activeObject as Texture2D; //獲取旋轉的對象 20 string rootPath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(image)); //
獲取路徑名稱 21 string path = rootPath + "/" + image.name + ".PNG"; //圖片路徑名稱 22 23 24 TextureImporter texImp = AssetImporter.GetAtPath(path) as TextureImporter; 25 26 27 AssetDatabase.CreateFolder(rootPath, image.name); //創建文件夾 28 29 30 foreach (SpriteMetaData metaData in texImp.spritesheet) //遍歷小圖集 31 { 32 Texture2D myimage = new Texture2D((int)metaData.rect.width, (int)metaData.rect.height); 33 34 35 //abc_0:(x:2.00, y:400.00, width:103.00, height:112.00) 36 for (int y = (int)metaData.rect.y; y < metaData.rect.y + metaData.rect.height; y++)//Y軸像素 37 { 38 for (int x = (int)metaData.rect.x; x < metaData.rect.x + metaData.rect.width; x++) 39 myimage.SetPixel(x - (int)metaData.rect.x, y - (int)metaData.rect.y, image.GetPixel(x, y)); 40 } 41 42 43 //轉換紋理到EncodeToPNG兼容格式 44 if (myimage.format != TextureFormat.ARGB32 && myimage.format != TextureFormat.RGB24) 45 { 46 Texture2D newTexture = new Texture2D(myimage.width, myimage.height); 47 newTexture.SetPixels(myimage.GetPixels(0), 0); 48 myimage = newTexture; 49 } 50 var pngData = myimage.EncodeToPNG(); 51 52 53 //AssetDatabase.CreateAsset(myimage, rootPath + "/" + image.name + "/" + metaData.name + ".PNG"); 54 File.WriteAllBytes(rootPath + "/" + image.name + "/" + metaData.name + ".PNG", pngData); 55 } 56 } 57 }

本代碼添加在 Asset/Editor 目錄下 才會生效,

依據上述步驟,

在想要才分的圖集的圖片 右鍵 -> Sprite Sheet Packer -> Process to Sprite

之後就會在同目錄下生成一個相同圖集文件名的文件夾,裏面就是才分出來的圖集的每個資源了

利用Unity自帶的合圖切割功能將合圖切割成子圖