欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Unity实现切割图集工具

程序员文章站 2022-04-03 20:29:40
本文实例为大家分享了unity实现切割图集工具的具体代码,供大家参考,具体内容如下操作步骤先将脚本拖入editor1.选中要切割的图片,texture type 选为default,并勾选advanc...

本文实例为大家分享了unity实现切割图集工具的具体代码,供大家参考,具体内容如下

操作步骤

先将脚本拖入editor

1.选中要切割的图片,texture type 选为default,并勾选advanced下的read/write enabled

Unity实现切割图集工具

2.texture type改为sprite(2d and ui),sprite mode 选为multiple,apply一下

Unity实现切割图集工具

3.sprite editor 先选其他的切一下,在选第一个切一下,切割成小图,apply

Unity实现切割图集工具

4.选中图集右键,imageslicer,process to sprites

Unity实现切割图集工具

5.等待切割完成后就可以在同级目录的同名文件夹下使用了

Unity实现切割图集工具

使用时要把小图type改为sprite(2d and ui),也可以更改名字

脚本如下

using unityengine;
using system.collections;
using unityeditor;
using system.io;
using system.collections.generic;
/// <summary>
/// 切割
/// </summary>
public static class imageslicer
{
    [menuitem("assets/imageslicer/process to sprites")]
    static void processtosprite()
    {
        texture2d image = selection.activeobject as texture2d;//获取旋转的对象
        string rootpath = path.getdirectoryname(assetdatabase.getassetpath(image));//获取路径名称
        string path = rootpath + "/" + image.name + ".png";//图片路径名称


        textureimporter teximp = assetimporter.getatpath(path) as textureimporter;//获取图片入口


        assetdatabase.createfolder(rootpath, image.name);//创建文件夹


        foreach (spritemetadata metadata in teximp.spritesheet)//遍历小图集
        {
            texture2d myimage = new texture2d((int)metadata.rect.width, (int)metadata.rect.height);

            //abc_0:(x:2.00, y:400.00, width:103.00, height:112.00)
            for (int y = (int)metadata.rect.y; y < metadata.rect.y + metadata.rect.height; y++)//y轴像素
            {
                for (int x = (int)metadata.rect.x; x < metadata.rect.x + metadata.rect.width; x++)
                    myimage.setpixel(x - (int)metadata.rect.x, y - (int)metadata.rect.y, image.getpixel(x, y));
            }


            //转换纹理到encodetopng兼容格式
            if (myimage.format != textureformat.argb32 && myimage.format != textureformat.rgb24)
            {
                texture2d newtexture = new texture2d(myimage.width, myimage.height);
                newtexture.setpixels(myimage.getpixels(0), 0);
                myimage = newtexture;
            }
            var pngdata = myimage.encodetopng();


            //assetdatabase.createasset(myimage, rootpath + "/" + image.name + "/" + metadata.name + ".png");
            file.writeallbytes(rootpath + "/" + image.name + "/" + metadata.name + ".png", pngdata);
            // 刷新资源窗口界面
            assetdatabase.refresh();
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关标签: Unity 切割图集