Unity 打包图集
生活随笔
收集整理的這篇文章主要介紹了
Unity 打包图集
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Unity打包圖集
public class MyTexturePak {private const string intPutPath = "/Emoji/Input/";private const string outPutPath = "Assets/Emoji/Output/";private static readonly Vector2[] atlasSize = new Vector2[]{new Vector2(32,32),new Vector2(64,64),new Vector2(128,128),new Vector2(256,256),new Vector2(512,512),new Vector2(1024,1024),new Vector2(2048,2048)};private const int imageSize = 128;[MenuItem("MyTool/Texture Pak")]private static void TexturePake(){Dictionary<string, int> loadTexDic = new Dictionary<string, int>();string[] filesStrArr = Directory.GetFiles(Application.dataPath + intPutPath, "*.png");for (int i = 0; i < filesStrArr.Length; i++){string[] tmpStr = filesStrArr[i].Split('/');string fileName = tmpStr[tmpStr.Length - 1].Split('_')[0];if (loadTexDic.ContainsKey(fileName)){loadTexDic[fileName]++;}else{loadTexDic.Add(fileName, 1);}}if (!Directory.Exists(outPutPath)){Directory.CreateDirectory(outPutPath);}int allF = 0;foreach (var key in loadTexDic.Keys){allF += loadTexDic[key];}Vector2 bigImageSize = GetSize(allF);Texture2D bigImage2D = new Texture2D((int)bigImageSize.x, (int)bigImageSize.y, TextureFormat.ARGB32, false);int x = 0;int y = 0;int ImageIndex = 0;Dictionary<string, EmojiInfo> TexPakInfoDic = new Dictionary<string, EmojiInfo>();foreach (var key in loadTexDic.Keys){for (int i = 0; i < loadTexDic[key]; i++){string path = "Assets" + intPutPath + key;if (loadTexDic[key]==1){path += ".png";}else{path += $"_{i + 1}.png";}Debug.Log(path);Texture2D loadSmallImage = AssetDatabase.LoadAssetAtPath<Texture2D>(path);Color[] colors = loadSmallImage.GetPixels(0);for (int j = 0; j < imageSize; j++){for (int k = 0; k < imageSize; k++){bigImage2D.SetPixel(x + j, y + k, colors[j + k * imageSize]);}}if (!TexPakInfoDic.ContainsKey(key)){EmojiInfo info;info.key = $"[{ImageIndex++}]";info.x = (x / bigImageSize.x).ToString();info.y = (y / bigImageSize.y).ToString();info.size = (imageSize / bigImageSize.x).ToString();TexPakInfoDic.Add(key, info);}x += imageSize;if (x>= bigImageSize.x){x = 0;y += imageSize;}}}byte[] buffer = bigImage2D.EncodeToPNG();File.WriteAllBytes(outPutPath + "MyBigTexture.png", buffer);using (StreamWriter sw = new StreamWriter(outPutPath + "MyBigTextureInfo.txt")){sw.WriteLine("Name\tKey\tFrames\tX\tY\tSize");foreach (var key in TexPakInfoDic.Keys){sw.WriteLine("{" + key + "}\t" + TexPakInfoDic[key].key + "\t" + loadTexDic[key] + "\t" + TexPakInfoDic[key].x + "\t" + TexPakInfoDic[key].y + "\t" + TexPakInfoDic[key].size);}}AssetDatabase.Refresh();TextureImporter emojiTex = AssetImporter.GetAtPath(outPutPath + "MyBigTexture.png") as TextureImporter;emojiTex.filterMode = FilterMode.Point;emojiTex.mipmapEnabled = false;emojiTex.sRGBTexture = true;emojiTex.alphaSource = TextureImporterAlphaSource.FromInput;emojiTex.textureCompression = TextureImporterCompression.Uncompressed;emojiTex.SaveAndReimport();EditorUtility.DisplayDialog("圖包打包完成", "成功!", "OK");}private static Vector2 GetSize(int allF){long num = imageSize * imageSize * allF;for (int i = 0; i < atlasSize.Length; i++){if (num<=atlasSize[i].x * atlasSize[i].y){return atlasSize[i];}}return Vector2.zero;}private struct EmojiInfo{public string key;public string x;public string y;public string size;} }總結
以上是生活随笔為你收集整理的Unity 打包图集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP SE14恢复表数据
- 下一篇: 医院管理系统mysql课程设计_数据库(