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
原创粉丝点击