Unity实用功能之切割图片并保存本地

3,999 阅读4分钟

这是我参与8月更文挑战的第20天,活动详情查看:8月更文挑战

概述

在项目开发中,有的时候需要将一张网上找到的Sprite图片资源进行切割,想要使用其中某一部分实用,或者是将图片切割作为拼图实用。这时候我们就需要使用图片切割功能,那么具体是如何实现的呢?让我们一起来看一下。

实现效果

545454545.gif

实现过程

本文使用的Unity版本Unity2019.4.17。
将要切的图片放到Unity的Resources文件夹下,方便后面写程序的时候调用\

下面将正式开始内容学习。go!go!go!

一、导入Package包
想要进行图片切割,首先要2D Sprite包安装到unity编辑器中,具体路径为Windows->Package Manager。在最上面的几个钟就有,找到之后点击右下角的Install进行安装即可

image.png 二、设置图片
导入进Unity中的图片类型一般都是Default类型的,所以我们要把他改成Sprite(2D and UI)如下

image.png image.png 更改完图片类型之后,更改图片模式,将其更改为Multiple之后才能够进行图片切割

image.png

注意:重点的一步,一定要将图片设置为可读写的模式,在Advanced下的Read/Write Enabled,这一项一定要勾选。

image.png

不要忘记点击Applay

三、图片切割
在将图片类型和格式设置好之后,接下来就是要对图片隐形切割了,点击Sprite Editor按钮对图片进行切割

image.png 打开切割界面之后会发现左上角有一个Slice(切片)按钮,点击按钮,在弹出小窗口中选择切割类型。 切割类型一共分为三种:

  • Automatic:自动切割
  • Grid By Cell Size:按照尺寸切割
  • Grid By Cell Count:按照个数切割 在这里我们选择按照尺寸切割,第二个 image.png 我们来看一下如下界面,设置切割的每部分的长宽高以及间隔等参数,设置好之后点击Slice,进行图片切割 image.png 下图中,箭头所指的就是切割线,还可以看到每一块的大小等参数,切割完之后,可以用鼠标拖动线框自定义调节切图大小

image.png 最后点击Apply进行保存,位置在右上角

image.png 保存完我们可以在Unity中看到,我们导入的图片已经分成了几个不同的小块,但是还需要将其分成单独独立的图片

image.png 四、编写代码将图片保存成独立图片

新建一个脚本,这里是通过[MenuItem("Tools/导出精灵")]将代码写到了编辑器扩展里,用不到的小伙伴也可以不写,也可以直接在程序中调用。
通过Selection.objects获取选中的图片,然后遍历,然后获取选中文件的路径,通过

Sprite[] sprites = Resources.LoadAll<Sprite>(loadPath);

将此文件下的所有资源(Sprite)获取到。
然后在创建一个输出(保存)文件夹

 string outPath = Application.dataPath + "/outSprite/" + loadPath;
 System.IO.Directory.CreateDirectory(outPath);

在之后遍历所有的Sprite,单独创建一个纹理,以及保存成Png格式的图片

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();
    // 写入成PNG文件
    System.IO.File.WriteAllBytes(outPath + "/" + sprite.name + ".png", tex.EncodeToPNG());
}

到此所有的图片就保存到了单独的文件夹中,如下图所示

image.png 遇到的问题
1、报错如下 image.png 解决办法: 该问题就是图片的可读写没有打开,打开图片的可读写模式即可:Advanced下的Read/Write Enabled

2、报如下两个错误:

image.png

image.png 具体原因不是很清楚,大概应该是图片的格式不对,将图片格式改为RGBA 32 bit即可 image.png

源代码分享

GitHub地址:点击这里跳转下载

写在最后

所有分享的内容均为作者在日常开发过程中使用过的各种小功能点,分享出来也变相的回顾一下,如有写的不好的地方还请多多指教。欢迎大家相互学习进步。本片文章就先写到这里,希望对你能够有所帮助