Unity 导出图集切图精灵 切片精灵

将图集图片(png、tga)放入Unity的“Assets/Resources”目录下,选中图集,在Inspector面板做如下操作:

1.将Texture Type改成Sprite(2D and UI)

2.将Sprite Mode改成Multiple

3.将Read/Write Enabled

4.将Format改成RGBA 32bit

5.点击Apply

操作如下图

Unity 导出图集切图精灵 切片精灵_第1张图片 修改图片属性

点击Sprite Editor,进入精灵编辑器,如下图:

Unity 导出图集切图精灵 切片精灵_第2张图片 设置切图

进入精灵编辑器后,点击编辑器左上角的Slice,然后在弹出的下拉框中点击Slice,最后点击右上角的Apply,完成对图集切图。

Unity 导出图集切图精灵 切片精灵_第3张图片 精灵编辑器

完成对图集的切图后,创建C#脚本ExportSpriteEditor.cs文件并添加如下代码:

using UnityEngine;
using UnityEditor;

/// 
/// 导出精灵工具
/// 
public class ExportSpriteEditor
{
    [MenuItem("Tools/导出精灵")]
    static void ExportSprite()
    {
        string resourcesPath = "Assets/Resources/";
        foreach (Object obj in Selection.objects)
        {
            string selectionPath = AssetDatabase.GetAssetPath(obj);

            if (selectionPath.StartsWith(resourcesPath))
            {
                string selectionExt = System.IO.Path.GetExtension(selectionPath);
                if (selectionExt.Length == 0)
                {
                    Debug.LogError($"资源{selectionPath}的扩展名不对,请选择图片资源");
                    continue;
                }

                // 设置图片属性
//                string path = AssetDatabase.GetAssetPath(obj);
//                TextureImporter ti = (TextureImporter) TextureImporter.GetAtPath(path);
//                ti.textureType = TextureImporterType.Sprite;
//                ti.spriteImportMode = SpriteImportMode.Multiple;
//                // 旧版Unity方法
////                ti.textureFormat = TextureImporterFormat.RGBA32;
//                ti.textureCompression = TextureImporterCompression.Uncompressed;
//                ti.isReadable = true;
//                AssetDatabase.ImportAsset(path);

                // 如果selectionPath = "Assets/Resources/UI/Common.png"
                // 那么loadPath = "UI/Common"
                string loadPath = selectionPath.Remove(selectionPath.Length - selectionExt.Length);
                loadPath = loadPath.Substring(resourcesPath.Length);

                // 加载此文件下的所有资源
                Sprite[] sprites = Resources.LoadAll(loadPath);
                if (sprites.Length > 0)
                {
                    // 创建导出目录
                    string exportPath = Application.dataPath + "/ExportSprite/" + loadPath;
                    System.IO.Directory.CreateDirectory(exportPath);

                    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();

                        // 将图片数据写入文件
                        System.IO.File.WriteAllBytes(exportPath + "/" + sprite.name + ".png", tex.EncodeToPNG());
                    }

                    Debug.Log("导出精灵到" + exportPath);
                }

                Debug.Log("导出精灵完成");
                // 刷新资源
                AssetDatabase.Refresh();
            }
            else
            {
                Debug.LogError($"请将资源放在{resourcesPath}目录下");
            }
        }
    }
}

代码创建完毕,选中图集图片文件,如下图:

Unity 导出图集切图精灵 切片精灵_第4张图片 选中图集

点击Unity顶部的菜单栏,选中Tools,点击“导出精灵”,如下图:

标题

在Assets/ExportSprite目录下就可以找到导出的切图文件了。如下图:

Unity 导出图集切图精灵 切片精灵_第5张图片 导出的切图

最后附上工程地址,有问题,可以在博客留言。

https://gitee.com/foryun/UnityExportSprite

你可能感兴趣的:(工具)