文章目录
一、前言二、操作步骤1、图片格式设置2、Slice切割3、SplitTexture脚本4、执行菜单命令
三、结束
一、前言
点关注不迷路,持续输出Unity干货文章。
有时候,我们需要将一张大图分离成多张小图单独保存成文件。比如下面这张图,我只想要第一只小鸟的图。 我们可以利用Unity的TextureImporter类的spritesheet成员获取到每个小图的信息,然后再分别保存成小图文件即可。
二、操作步骤
1、图片格式设置
将图片导入Unity中,格式设置为Sprite (2D and UI),将Sprite Mode设置为Multiple,点击Apply。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210316095804117.png?x-oss-process=/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbnhpbmZh,size_16,color_FFFFFF,t_70)
2、Slice切割
点击Sprite Editor, 点击Slice下拉按钮,根据实际情况设置切割模式,比如这张鸟图直接设置Automatic即可,然后点击Slice按钮。 切割成功后,点击Apply保存。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210316092634404.png?x-oss-process=/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbnhpbmZh,size_16,color_FFFFFF,t_70)
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, 此时就会在大图同级目录下生成一个同名的文件夹,分离的小图就会保存在这个文件夹中。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210316100822473.png?x-oss-process=/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbnhpbmZh,size_16,color_FFFFFF,t_70)
三、结束
这样,我们就得到了我们想要的小图了。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/202103161010127.png)
|