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

轉載的,牛人無處不在,我還太眇小工具

 

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

這種切割每每不可本身微調或者很難維調,致使效果不理想。插件

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

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

來自:百度Unity3D貼吧的13471713164對象

連接:http://tieba.baidu.com/p/3217039693blog

 

 

 

 

 

 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 目錄下 纔會生效,圖片

依據上述步驟,utf-8

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

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

相關文章
相關標籤/搜索