Unity - 模拟Sprite Packer合并多个Sprite
现在做一个卡牌Demo,由于没有沟通好,动画师为了做Anima2D动画方便,把角色每个部位拆分成单个Sprite,这样肯定是不行的,不仅加大了容量,运行时效率也不高。但是由于动画已经做好了,再回去手动合并再修改Anima2D非常麻烦,只好让程序实现一个快捷工具,把单个的Sprite合成一张大图集,把与单个Sprite绑定的Anima2D数据迁移到大图集。忙了一天总算弄好了,现在记录一下。
Sprite Packer
把Sprite合并成图集其实是Unity内置的功能——Sprite Packer,Sprite Packer会把相同Packing Tag的Sprite合并成大图集,我们要做的就是模拟Sprite Packer。简单的一个思路是:把要打包的Sprite放到一个文件下;得到所有单独的Sprite;生成单独的Texture;打包;切分Texture。
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace Utility
{
public class AtlasTest
{
[UnityEditor.MenuItem("SpriteAtlas/CreateAtlas")]
public static void CreateAtlas()
{
string spritePath = string.Empty;
spritePath = EditorUtility.OpenFolderPanel("选择文件夹", "", "");
List<Sprite> sprites = new List<Sprite>();
List<Texture2D> newTexs = new List<Texture2D>();
List<string> extensions = new List<string>() {
".png", ".jpg", ".psd" };
// 找出单独的sprite
string[] files = Directory.GetFiles(spritePath, "*.*", SearchOption.AllDirectories)
.Where(s => extensions.Contains(