Unity编辑器扩展:图集拆分

发表于2018-07-04
评论0 3k浏览
项目中需要用到图片资源有很多,如果把整个图集打包到项目则明显是不划算的,而如果让美术人员去把这些需要的图片切出来工作量又太大,此时借助工具在Project下选择要切出小图的Sprite。

代码如下:
//导出单个精灵
    [MenuItem("Assets/MyEditor/SingleSpritesExport &x")]
    static void SingleSpritesExport()
    {
        string resourcesPath = "Assets/Resources/";
        foreach (Object obj in Selection.objects)
        {
            string selectionPath = AssetDatabase.GetAssetPath(obj);
            // 必须最上级是"Assets/Resources/"
            if (selectionPath.StartsWith(resourcesPath))
            {
                string selectionExt = System.IO.Path.GetExtension(selectionPath);
                if (selectionExt.Length == 0)
                {
                    continue;
                }
                // 得到导出路径
                string loadPath = selectionPath.Remove(selectionPath.Length - selectionExt.Length);
                loadPath = loadPath.Substring(resourcesPath.Length);
                // 加载此文件下的所有资源
                Sprite[] sprites = Resources.LoadAll<Sprite>(loadPath);
                if (sprites.Length > 0)
                {
                    // 创建导出文件夹
                    string outPath = Application.dataPath + "/outSprite/" + loadPath;
                    System.IO.Directory.CreateDirectory(outPath);
                    foreach (Sprite sprite in sprites)
                    {
                        // 创建单独的纹理
                        Texture2D tex = new Texture2D((int)sprite.rect.width, (int)sprite.rect.height, sprite.texture.format, false);
                        tex.SetPixels(sprite.texture.GetPixels((int)sprite.rect.xMin, (int)sprite.rect.yMin,
                            (int)sprite.rect.width, (int)sprite.rect.height));
                        tex.Apply();
                        // 写入成PNG文件
                        System.IO.File.WriteAllBytes(outPath + "/" + sprite.name + ".png", tex.EncodeToPNG());
                    }
                    Debug.Log(string.Format("Export {0} to {1}", loadPath, outPath));
                }
            }
        }
        Debug.Log("Export All Sprites Finished");
    }

注意要把图集放到Resources文件下并勾选Read/Write Enable
拆分后

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引