unity 2D Sprite网格Slice工具
来源:互联网 发布:南平广电网络客服电话 编辑:程序博客网 时间:2024/06/05 11:51
unity提供对2D sprite的切图,目前最新版5.2.2提供三种方式:
Automatic
Grid by Cell Size
Grid by Cell Count
按道理来说应该满足各种切图了,但若我们的图上存在纯透明的元素,而我们需要按编号来取图,则unity切图时会由于智能略过透明元素,如下图
我们希望均匀的将它切成12*12的格子,并且从左上到右下编号为0到143。
使用unity的切图算法会自动略过透明格,导致我们的编号错位。
我没有找到好的办法解决,于是只能自己写了一个工具,中间还发现了一个unity的小BUG~
我们使unity editor的metadata操作相关的工具函数来编写:
using UnityEngine;using UnityEditor;using System.Collections;using System.IO;using System.Collections.Generic;using JianghuX;using UnityEditorInternal;using UnityEditor.Animations;public class SpriteTools : Editor{[MenuItem("Tools/TilemapTools/ProcessTileResources")]public static void ProcessTileResources(){Debug.Log ("处理探索地图图片中..");Process("dixiachengzhuanshitudi");Process("dixiachengwupin");Process("caoshuituhunhe");Process("dixiachengdituheji");Process("shanmaichengshi", 256, 256);Process("shulin");Process("teshudixing");Process("tudiheji");Process("shibanwenli", 512, 256);Process ("jianzhu");}private static void Process(string file, int SIZEW = 128, int SIZEH = 128){Texture2D sp = Resources.Load<Texture2D>("TileRes/" + file);int W = sp.width;int H = sp.height;int ROW = H /SIZEH;int COLUMN = W / SIZEW;string path = "Assets\\Resources\\TileRes\\" + file + ".png";Debug.Log ("processing tile resource:" + path);TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter;var blocks = new SpriteMetaData[COLUMN * ROW];for(int i=0;i<ROW;++i){for(int j=0;j<COLUMN;++j){int id = i*COLUMN + j;SpriteMetaData tmp = new SpriteMetaData();tmp.name = file + "_" + id;tmp.rect = new Rect(j*SIZEW, ROW*SIZEH - SIZEH - i * SIZEH, SIZEW, SIZEH);blocks[id] = tmp;}}textureImporter.spritesheet = blocks;textureImporter.fadeout = !textureImporter.fadeout;textureImporter.SaveAndReimport();//sb unity's bug(force refresh)textureImporter.fadeout = false;textureImporter.SaveAndReimport();}}
这里根据提供的图片大小均匀切分。最后unity有个BUG是 textureImporter在只修改spritesheet成员的情况下,SaveAndReimport()无效(估计是没有把它标记为dirty),无奈没有办法,只有使用一个笨办法,找一个其他的成员函数涂脏,保存后,再涂回来。(这里找的是fadeout)
0 0
- unity 2D Sprite网格Slice工具
- Unity 2D Sprite
- Unity-2D图形&Sprite
- Unity 访问2d组件 Sprite Renderer
- 【Unity】2D Sprite九宫格(NineSliced)
- UNITY 2D学习笔记(一):Sprite
- 2D sprite outlines
- 2015/2/28 unity 2D Game 图集sprite相关问题(1)
- Unity 2D Toolkit中动态改变Animated Sprite的Shader
- (1-3)Unity3D/2D:Unity中使用Sprite-sheets
- Unity 2D工具:工作流介绍
- Unity即将到来的2D工具
- Sprite (2D and UI)
- Sprite (2D and UI)
- 【Unity&2D&Sprite&描边&特效&Shader】2D2.5D像素图片描边特效实现
- Unity推出2D工具:不再只是3D引擎
- Unity推出2D工具:不再只是3D引擎
- 逆天的骨骼动画工具 Spine 把2D画皮3D网格化。
- [urls.py设置技巧]URLconf处理其四:URL调度器详解
- Linux进程间通信——使用匿名管道
- swing
- Trinea性能优化之移动端的网络优化
- Caused by: java.net.SocketException: Connection reset
- unity 2D Sprite网格Slice工具
- iOS类簇(Class Cluster)使用心得
- 从MVC到前后端分离
- [问题记录]js将事件写在函数之前解决IE8的兼容性问题
- codeforce 4D Mysterious Present 简单思路 动态规划
- 使用Python设置环境变量
- VS2008LINK : fatal error LNK1000: Internal error during IncrBuildImage编译错误解决办法
- 串口扩展研究
- Linux进程间通信——使用命名管道