Unity图集分割

using System.IO;
using UnityEngine;
using UnityEditor;

public class TestSaveSprite
{
  [MenuItem("LLWH/SpriteSplit")]
  public static void SpriteSlice()
  {
    Texture2D image = Selection.activeObject as Texture2D; // 得到选中的图集 该图集事先已经被修改属性
    string rootPath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(image)); //文件所在的路径
    string path = rootPath + "/" + image.name + ".PNG"; //Assets/Resources/UI/XXX.png
    TextureImporter texImp = AssetImporter.GetAtPath(path) as TextureImporter;
    AssetDatabase.CreateFolder(rootPath, image.name);

    // 遍历图集中每一张小图,并使用文件IO写入到同级目录的文件夹中

    foreach (SpriteMetaData metaData in texImp.spritesheet)
    {
      Texture2D myimage = new Texture2D((int)metaData.rect.width, (int)metaData.rect.height);

      for (int y = (int)metaData.rect.y; y < metaData.rect.y + metaData.rect.height; 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));
      }
      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();
      File.WriteAllBytes(rootPath + "/" + image.name + "/" + metaData.name + ".PNG", pngData);
      AssetDatabase.Refresh();
    }
  }
}

 

转载于:https://www.cnblogs.com/LLWH134/p/8043176.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值