【游戏开发工具】Unity将Slice分割后的Sprite图分离成多张小图单独保存成文件(关键字:SplitTexture、TextureImporter、SpriteMetaData) 您所在的位置:网站首页 ai怎么单独导出其中一张图片的内容 【游戏开发工具】Unity将Slice分割后的Sprite图分离成多张小图单独保存成文件(关键字:SplitTexture、TextureImporter、SpriteMetaData)

【游戏开发工具】Unity将Slice分割后的Sprite图分离成多张小图单独保存成文件(关键字:SplitTexture、TextureImporter、SpriteMetaData)

2024-07-12 02:10| 来源: 网络整理| 查看: 265

文章目录 一、前言二、操作步骤1、图片格式设置2、Slice切割3、SplitTexture脚本4、执行菜单命令 三、结束

一、前言

点关注不迷路,持续输出Unity干货文章。

有时候,我们需要将一张大图分离成多张小图单独保存成文件。比如下面这张图,我只想要第一只小鸟的图。 在这里插入图片描述 我们可以利用Unity的TextureImporter类的spritesheet成员获取到每个小图的信息,然后再分别保存成小图文件即可。

二、操作步骤 1、图片格式设置

将图片导入Unity中,格式设置为Sprite (2D and UI),将Sprite Mode设置为Multiple,点击Apply。 在这里插入图片描述

2、Slice切割

点击Sprite Editor, 在这里插入图片描述 点击Slice下拉按钮,根据实际情况设置切割模式,比如这张鸟图直接设置Automatic即可,然后点击Slice按钮。 在这里插入图片描述 切割成功后,点击Apply保存。 在这里插入图片描述

3、SplitTexture脚本

将下面的代码保存为SplitTexture.cs,放在Editor文件夹中。 在这里插入图片描述 SplitTexture.cs代码如下:

// SplitTexture.cs using UnityEngine; using UnityEditor; using System.IO; /// /// 将图片分离成多张小图 /// public class SplitTexture { [MenuItem("Tools/SplitTexture")] static void DoSplitTexture() { // 获取所选图片 Texture2D selectedImg = Selection.activeObject as Texture2D; string rootPath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(selectedImg)); string path = rootPath + "/" + selectedImg.name + ".png"; TextureImporter texImp = AssetImporter.GetAtPath(path) as TextureImporter; // 设置为可读 texImp.isReadable = true; AssetDatabase.ImportAsset(path); // 创建文件夹 AssetDatabase.CreateFolder(rootPath, selectedImg.name); foreach (SpriteMetaData metaData in texImp.spritesheet) { var width = (int)metaData.rect.width; var height = (int)metaData.rect.height; Texture2D smallImg = new Texture2D(width, height); var pixelStartX = (int)metaData.rect.x; var pixelEndX = pixelStartX + width; var pixelStartY = (int)metaData.rect.y; var pixelEndY = pixelStartY + height; for (int x = pixelStartX; x smallImg.SetPixel(x - pixelStartX, y - pixelStartY, selectedImg.GetPixel(x, y)); } } // 转换纹理到EncodeToPNG兼容格式 if (TextureFormat.ARGB32 != smallImg.format && TextureFormat.RGB24 != smallImg.format) { Texture2D img = new Texture2D(smallImg.width, smallImg.height); img.SetPixels(smallImg.GetPixels(0), 0); smallImg = img; } // 保存小图文件 string smallImgPath = rootPath + "/" + selectedImg.name + "/" + metaData.name + ".png"; File.WriteAllBytes(smallImgPath, smallImg.EncodeToPNG()); // 刷新资源窗口界面 AssetDatabase.Refresh(); // 设置小图的格式 TextureImporter smallTextureImp = AssetImporter.GetAtPath(smallImgPath) as TextureImporter; // 设置为可读 smallTextureImp.isReadable = true; // 设置alpha通道 smallTextureImp.alphaIsTransparency = true; // 不开启mipmap smallTextureImp.mipmapEnabled = false; AssetDatabase.ImportAsset(smallImgPath); } } } 4、执行菜单命令

选中要分割的大图, 在这里插入图片描述 点击菜单Tools / SplitTexture, 在这里插入图片描述 此时就会在大图同级目录下生成一个同名的文件夹,分离的小图就会保存在这个文件夹中。 在这里插入图片描述

三、结束

这样,我们就得到了我们想要的小图了。 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有