Unity Sprite切割导出
这次需要将美术提供的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切割导出的更多相关文章
- unity sprite怎么获取切割后的图
学习了一段时间的unity,对里面的组件有一个大致的了解,但是具体操作来说还不是很熟悉,今天看了一片关于unity sprite怎么获取切割后的图的文章,感觉还不错. 假设有一张png/tga图集,导 ...
- Unity 4.7 导出工程在XCode9/10上报错 validateRenderPassDescriptor:644: failed assertion `XXXX'
Unity 4.7 导出工程在XCode9/10上报错 validateRenderPassDescriptor:644: failed assertion `Texture at colorAtta ...
- Unity 4.7 导出工程在XCode10.1上编译报错
Unity 4.7 导出工程在XCode 10.1上编译报错,而在XCode 9.3上是可以正常编译运行的.原因是Unity4.7所依赖的头文件和库文件在XCode10上没有了,解决办法如下,把XCo ...
- Unity 切割导出精灵
Unity中经常使用到精灵,尤其是2D游戏中制作动画等!今天我们就学习下精灵的切割和导出吧! 废话不多说,先建议空的工程. 1,打开Unity建工程. 2 导入素材进行资源分类,工程不在于大小,这是我 ...
- Unity 模型导入导出
从3DMAX导出,参考: http://tieba.baidu.com/p/2807225555 -> 使用3dmax 2013,会自带导出 fbx 的功能 -> 从 3dmax 导出 - ...
- Unity模型导入导出
从3DMAX导出,参考: http://tieba.baidu.com/p/2807225555 -> 使用3dmax 2013,会自带导出 fbx 的功能 -> 从 3dmax 导出 - ...
- unity, sprite atlas
一, Sprite Packer 可以直接在unity里放碎图,只要将Texture Type选为Sprite(2D and UI),Sprite Mode选为Single,再把想打在一张大图里的碎图 ...
- Unity Critter地图导出到server配置
普通情况下,从Critter导出的地图会与Unity自带的Navigation洪培出的地图会有比較大的差异.须要耐心调整Critter的參数才干够. 以下是我调的參数,与Unity导出的地图基本相似. ...
- Unity Sprite Packer 问题集合
介绍 今天突发奇想用了下sprite packer 这个功能,基本用法网上教程一堆一堆的,这里就不赘述了. 在使用sprite packer过程中遇到一些问题,然后各种百度不到答案,最后和谐上网找到了 ...
随机推荐
- 探究platform_driver中的shutdown用途
http://blog.csdn.net/moxiaomomo/article/details/7897943 "quiesce" 说的也不太明确,我的猜测是:比如系统中有一个大功 ...
- 使用ajax登录格式
登录页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- Swift基础语法学习总结
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...
- Javascript 学习
title: Javascript tags: javascript,学习 grammar_cjkRuby: true --- 定义变量 三种形式 var name; var name = " ...
- 微信小程序注册app
App() App() 函数用来注册一个小程序.接受一个 object 参数,其指定小程序的生命周期函数等. object参数说明 onLaunch Function 生命周期函数--监听小程序初 ...
- 微信小程序配置文件
app.json 配置文件中不能有注释 { "pages": [ // 必填 设置页面路径 "pages/index/index", "pages ...
- 一个java的DES加密解密类转换成C#
一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //import java.util.regex.P ...
- css+div打造三角形(箭头)
在很多网站都见过这样的箭头,之前我一直以为是图片,直到今天才知道原来可以用css做.开始看代码没太看懂,后来自己试了几遍才恍然大悟.贴出来分享下.(大神请直接忽略) 先看代码: HTML部分就是一个单 ...
- php总结 --- 2.字符串
字符串 恩聪 正则表达式 恩聪 中文验证 if (preg_match("/[\x{4e00}-\x{9fa5}]{2,4}\s{0,}\w{8,15}/u", $keyword) ...
- USACO2011Brownie Slicing巧克力蛋糕切片
Description Bessie烘焙了一块巧克力蛋糕.这块蛋糕是由R*C(1 <= R,C <= 500)个小的巧克力蛋糕组成的. 第i行,第j列的蛋糕有N_ij(1 < ...