这次需要将美术提供的Sprite图集切割导出,整体思路依然和上次的Sprite转prefab一致,只是在转prefab的逻辑修改为了创建Texture的逻辑。

过程很简单,直接看最终代码结果:

using System.IO;
using UnityEngine;
using UnityEditor;
using System.Linq; public class SpriteToSplit { /// <summary>
/// 切割Sprite导出单个对象
/// </summary>
[MenuItem("Assets/Create/SpriteSplit2Export", false, )]
public static void SpriteChildToExport()
{
for (int i = ; i < Selection.objects.Length; i++)
{
//获得选择对象路径;
string spritePath = AssetDatabase.GetAssetPath(Selection.objects[i]);
//所有子Sprite对象;
Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(spritePath).OfType<Sprite>().ToArray();
if (sprites.Length < )
{
EditorUtility.DisplayDialog("错误", "当前选择文件不是Sprite!", "确认");
Debug.LogError("Sorry,There is not find sprite!");
return;
}
string[] splitSpritePath = spritePath.Split(new char[] { '/' });
//文件夹路径 通过完整路径再去掉文件名称即可;
string fullFolderPath = Inset(spritePath, , splitSpritePath[splitSpritePath.Length - ].Length + ) + "/" + Selection.objects[i].name;
//同名文件夹;
string folderName = Selection.objects[i].name;
string adjFolderPath = InsetFromEnd(fullFolderPath, Selection.objects[i].name.Length + );
//验证路径;
if (!AssetDatabase.IsValidFolder(fullFolderPath))
{
AssetDatabase.CreateFolder(adjFolderPath, folderName);
} for (int j = ; j < sprites.Length; j++)
{ //进度条;
string pgTitle = (i + ).ToString() + "/" + Selection.objects.Length + " 开始导出Sprite";
string info = "当前Srpte: " + j + "->" + sprites[j].name;
float nowProgress = (float)j / (float)sprites.Length;
EditorUtility.DisplayProgressBar(pgTitle, info, nowProgress);
//创建Texture;
Sprite sprite = sprites[j];
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();
//判断保存路径;
string savePath = fullFolderPath + "/" + sprites[j].name + ".png";
//生成png;
File.WriteAllBytes(savePath,tex.EncodeToPNG());
}
//释放进度条;
EditorUtility.ClearProgressBar();
//刷新资源,不然导出后你以为没导出,还要手动刷新才能看到;
AssetDatabase.Refresh();
} } /// <summary>
/// 截取路径
/// </summary>
/// <param name="path"></param>
/// <param name="leftIn">左起点</param>
/// <param name="rightIn">右起点</param>
/// <returns></returns>
public static string Inset(string path, int leftIn, int rightIn)
{
return path.Substring(leftIn, path.Length - rightIn - leftIn);
} /// <summary>
/// 截取路径
/// </summary>
/// <param name="path"></param>
/// <param name="inset"></param>
/// <returns></returns>
public static string InsetFromEnd(string path, int inset)
{
return path.Substring(, path.Length - inset);
}
}

使用方法如下图:

Unity Sprite切割导出的更多相关文章

  1. unity sprite怎么获取切割后的图

    学习了一段时间的unity,对里面的组件有一个大致的了解,但是具体操作来说还不是很熟悉,今天看了一片关于unity sprite怎么获取切割后的图的文章,感觉还不错. 假设有一张png/tga图集,导 ...

  2. Unity 4.7 导出工程在XCode9/10上报错 validateRenderPassDescriptor:644: failed assertion `XXXX'

    Unity 4.7 导出工程在XCode9/10上报错 validateRenderPassDescriptor:644: failed assertion `Texture at colorAtta ...

  3. Unity 4.7 导出工程在XCode10.1上编译报错

    Unity 4.7 导出工程在XCode 10.1上编译报错,而在XCode 9.3上是可以正常编译运行的.原因是Unity4.7所依赖的头文件和库文件在XCode10上没有了,解决办法如下,把XCo ...

  4. Unity 切割导出精灵

    Unity中经常使用到精灵,尤其是2D游戏中制作动画等!今天我们就学习下精灵的切割和导出吧! 废话不多说,先建议空的工程. 1,打开Unity建工程. 2 导入素材进行资源分类,工程不在于大小,这是我 ...

  5. Unity 模型导入导出

    从3DMAX导出,参考: http://tieba.baidu.com/p/2807225555 -> 使用3dmax 2013,会自带导出 fbx 的功能 -> 从 3dmax 导出 - ...

  6. Unity模型导入导出

    从3DMAX导出,参考: http://tieba.baidu.com/p/2807225555 -> 使用3dmax 2013,会自带导出 fbx 的功能 -> 从 3dmax 导出 - ...

  7. unity, sprite atlas

    一, Sprite Packer 可以直接在unity里放碎图,只要将Texture Type选为Sprite(2D and UI),Sprite Mode选为Single,再把想打在一张大图里的碎图 ...

  8. Unity Critter地图导出到server配置

    普通情况下,从Critter导出的地图会与Unity自带的Navigation洪培出的地图会有比較大的差异.须要耐心调整Critter的參数才干够. 以下是我调的參数,与Unity导出的地图基本相似. ...

  9. Unity Sprite Packer 问题集合

    介绍 今天突发奇想用了下sprite packer 这个功能,基本用法网上教程一堆一堆的,这里就不赘述了. 在使用sprite packer过程中遇到一些问题,然后各种百度不到答案,最后和谐上网找到了 ...

随机推荐

  1. 【转】ini载入保存类,操作INI配置文件方便的很

    /****************************************************************** * * ^_^ 恶猫 独门商标 挖哈哈 * * QQ:\> ...

  2. [问题2014A09] 解答

    [问题2014A09]  解答 通过简单的计算可得 \[(AB)^2=9AB,\cdots\cdots(1)\] 将 (1) 式的右边移到左边, 并将 \(A,B\) 分别提出可得 \[A(BA-9I ...

  3. Android 自动化测试 Emmagee

    Emmagee 是一个性能测试小工具 用来监控指定被测应用在使用过程中占用机器的CPU, 内存,流量资源的性能小工具 阅读目录 Emmagee 介绍 Emmagee是网易杭州研究院QA团队开发的一个简 ...

  4. Learning Roadmap of Deep Reinforcement Learning

    1. 知乎上关于DQN入门的系列文章 1.1 DQN 从入门到放弃 DQN 从入门到放弃1 DQN与增强学习 DQN 从入门到放弃2 增强学习与MDP DQN 从入门到放弃3 价值函数与Bellman ...

  5. vi/vim基本使用方法

    vi/vim 基本使用方法本文介绍了vi (vim)的基本使用方法,但对于普通用户来说基本上够了!i/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所 ...

  6. Python之SQLAlchemy学习

    alchemy 英[ˈælkəmi] 美[ˈælkəmi] n. 炼金术; 炼丹术; (改变事物.物质的)魔力(或方法) ; (事物.物质的) 神秘变化; SQLAlchemy是Python中最有名的 ...

  7. mac 安装 Scrapy

    一.pip安装Scrapy 运行命令 sudo pip install Scrapy(不带sudo 可能会出现 Permission denied) 然后 pip freeze 查看已经有 scrap ...

  8. (十)Linux 网络编程之ioctl函数

    1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...

  9. 【转】CentOS 6.5安装pyspider过程记录

    原文地址:http://blog.sina.com.cn/s/blog_48c95a190102wczx.html 1.根据pyspider官方推荐的安装方法,使用pip命令直接安装pyspider ...

  10. lodash接触:string-capitalize

    1.capitalize : _.capitalize([string='']) Capitalizes the first character of string. 参数 [string=''] ( ...