TexturePacker 可以通过命令行方式,批量生成图集,TexturePacker相关命令可以参考 https://blog.csdn.net/u014065445/article/details/54289787

unity中使用的方式是,通过C#中的Process类,创建一个独立进程,执行命令行脚本,完成图集生成和切分

Mac平台的shell脚本


./TexturePacker \
--sheet $3/$1_{n}.png \
--data $3/$1_{n}.txt $2 \
--format unity \
--trim-sprite-names \
--basic-sort-by Name \
--basic-order Descending \
--max-size $4 \
--size-constraints POT \
--force-squared \
--border-padding 1 \
--shape-padding 2 \
--disable-rotation \
--trim-mode None \
--disable-auto-alias \
--multipack

Windows平台的bat脚本

@echo off
start TexturePacker.exe %2 --sheet %3/%1_{n}.png --data %3/%1_{n}.txt %2 ^
--format unity --trim-sprite-names --basic-sort-by Name --basic-order Descending ^
--max-size %4 --size-constraints POT --force-squared --border-padding 1 --shape-padding 2 ^
--disable-rotation --trim-mode None --disable-auto-alias --multipack --extrude 0

unity编辑器脚本


using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Diagnostics;
using System;
using System.Text;
using LitJson;
​
public class BuildAtlasToolEditor  {
​public static string spriteFolder = "Assets/AssetBundleData/Image";public static string atlasFolder = "Assets/AssetBundleData/UI/Atlas";
​
​[MenuItem("Assets/Build Atlas/Build For Folder")]static void BuildForSelectedFolder(){string assetPath = AssetDatabase.GetAssetPath(Selection.activeObject);BuildForFolder(assetPath);}[MenuItem("Assets/Build Atlas/Build For Folder", true)]static bool ValidateBuildForSelectedFolder(){string assetPath = AssetDatabase.GetAssetPath(Selection.activeObject);string[] tempList = assetPath.Split('/');if(assetPath.Contains(spriteFolder) &&tempList.Length > 1){return true;}return false;}private static void BuildForFolder(string assetPath){//将路径切割string[] tempList = assetPath.Split('/');string atlasName = tempList[tempList.Length - 1];string spritePath = Path.Combine(Application.dataPath, assetPath.Replace("Assets/", ""));string atlasPath = Path.Combine(Application.dataPath, atlasFolder.Replace("Assets/", ""));int size = 1024;Process process = new Process();ProcessStartInfo psi = new ProcessStartInfo();psi.UseShellExecute = false;psi.RedirectStandardOutput = true;psi.RedirectStandardError = true;psi.RedirectStandardInput = true;
​
#if UNITY_EDITOR_OSXpsi.FileName = "/bin/sh";psi.WorkingDirectory = Path.Combine(Application.dataPath, "../../Tools/TexturePacker/mac/TexturePacker.app/Contents/MacOS");psi.Arguments = Path.Combine(Application.dataPath, "Editor/SpriteEditor/PackTexture.sh")+ " " + atlasName+ " " + spritePath+ " " + atlasPath+ " " + size;
#elif UNITY_STANDALONE_WINpsi.FileName = "PackTexture.bat";psi.WorkingDirectory = Path.Combine(Application.dataPath, "../../Tools/TexturePacker/wins/bin");psi.Arguments = Path.Combine(Application.dataPath, "Editor/SpriteEditor/PackTexture.bat")+ " " + atlasName+ " " + spritePath+ " " + atlasPath+ " " + size;
#endifprocess.StartInfo = psi;try{if (process.Start()){string strOutput = process.StandardOutput.ReadToEnd();string errorInfo = process.StandardError.ReadToEnd();process.WaitForExit();process.Close();if (!string.IsNullOrEmpty(strOutput)) {Debug.Log("Console outPut: " + strOutput);}if (!string.IsNullOrEmpty(errorInfo)){Debug.LogError("Console errorInfo: " + errorInfo);}}}catch (Exception e){process.Close();UnityEngine.Debug.LogError("========Fail to batch " + atlasName + ":" +e.ToString());return;}AssetDatabase.Refresh();SplitAtlasSprites(atlasName);}
​static void SplitAtlasSprites(string atlasName){for (int i = 0; ; i++){string texturePath = Path.Combine(atlasFolder, atlasName + "_" + i + ".png");string textureFullPath = Path.Combine(Application.dataPath, texturePath.Replace("Assets/", ""));if (!File.Exists(textureFullPath)){break;}TextureImporter ti = AssetImporter.GetAtPath(texturePath) as TextureImporter;ti.textureType = TextureImporterType.Sprite;ti.spriteImportMode = SpriteImportMode.Multiple;ti.mipmapEnabled = false;
​TextureImporterSettings tis = new TextureImporterSettings();ti.ReadTextureSettings(tis);tis.spriteMeshType = SpriteMeshType.Tight;tis.spriteExtrude = 0;//tis.alphaSource = TextureImporterAlphaSource.None;  ti.SetTextureSettings(tis);
​string jsonPath = Path.Combine(atlasFolder, atlasName + "_" + i + ".txt");string jsonFullPath = Path.Combine(Application.dataPath, jsonPath.Replace("Assets/", ""));string configJson = File.ReadAllText(jsonFullPath, Encoding.UTF8);JsonData configJsonData = JsonMapper.ToObject(configJson);int textureHeight = int.Parse(configJsonData["meta"]["size"]["h"].ToString());JsonData tempJsonData = configJsonData["frames"];List<SpriteMetaData> metas = new List<SpriteMetaData>();foreach (string name in tempJsonData.Keys){JsonData frameData = tempJsonData[name]["frame"];int x = int.Parse(frameData["x"].ToString());int y = int.Parse(frameData["y"].ToString());int w = int.Parse(frameData["w"].ToString());int h = int.Parse(frameData["h"].ToString());SpriteMetaData meta = new SpriteMetaData();string subSpritePath = string.Format("Assets/AssetBundleData/UI/{0}/{1}.png", atlasName, name);Sprite sprite = AssetDatabase.LoadAssetAtPath<Sprite>(subSpritePath);if (sprite != null && sprite.border != null){UnityEngine.Debug.Log(sprite.border);// meta.border = new Vector4(sprite.border.x, sprite.border.y, sprite.border.w, sprite.border.z);meta.border = sprite.border;}meta.pivot = new Vector2(0.5f, 0.5f);meta.alignment = (int)SpriteAlignment.Center;meta.rect = new Rect(x, textureHeight - y - h, w, h);meta.name = name;metas.Add(meta);}ti.spritesheet = metas.ToArray();ti.SaveAndReimport();AssetDatabase.DeleteAsset(jsonPath);//AssetDatabase.Refresh();}//AssetDatabase.Refresh();}
}


为了防止误操作,这里对可打图集的资源目录做了限制

 [MenuItem("Assets/Build Atlas/Build For Folder", true)]static bool ValidateBuildForSelectedFolder(){string assetPath = AssetDatabase.GetAssetPath(Selection.activeObject);string[] tempList = assetPath.Split('/');if(assetPath.Contains(spriteFolder) &&tempList.Length > 1){return true;}return false;}

TexturePacker 图集生成工具相关推荐

  1. Unity一键图集生成工具,附源码 (基于NGUI和TexturePacker)

    https://blog.uwa4d.com/archives/NGUI_SplitChannels.html Unity一键图集生成工具,附源码 (基于NGUI和TexturePacker) 作者: ...

  2. TexturePacker图集打包工具在Unity3D中的使用介绍

    在游戏开发过程中,图片的使用是必不可少的,尤其是在UI部分,往往会使用大量的图片.如果每一张图片都是单独使用的话,实际上会对性能造成很大的损耗的. 这时候我们往往是把需要的图片资源进行分类,然后按照需 ...

  3. Linux下三个密码生成工具

    http://code.csdn.net/news/2820879 想出一个难破解且容易记的密码对不是一件简单的事情.在我为电脑设定一个新密码,或者在线注册了一个新的账号,需要输入密码的时候,脑袋就一 ...

  4. Web 开发人员必备的随机 JSON 数据生成工具

    在 Web 开发中,经常会需要一些测试数据来测试接口或者功能时候正确.JSON Generator 就是这样一款生成随机 JSON 数据的在线工具,Web 开发人员必备,记得收藏和分享啊. 您可能感兴 ...

  5. 开源!开源!我写的Anto.exe C#代码自动生成工具.欢迎下载。。

    在开发的过程中开发人员不得不经常要写很多重复的代码, 为了把精力放到更重要的方面去很多人为都做了N多努力,随便google一下自动生成工具, 你都会很容易得到很多这样的工具.园子就有好几款,其中李天平 ...

  6. Java短连接生成工具-思路

    Java短连接生成工具-思路-这里只是模拟一下 package com.csrs.trans.shorturl;import java.util.HashMap; import java.util.M ...

  7. canvas-js贝塞尔曲线代码在线生成工具

    详细内容请点击 canvas贝塞尔曲线代码在线生成工具 可以快速生成二次.三次贝塞尔曲线的源码生成器,方便经常使用到canvas画图的同学使用,可以直接预览效果随意画出自己想要的图像. 生成源码效果预 ...

  8. MRTG教程(二):MRTG配置文件的生成工具cfgmaker(上)

    MRTG配置文件的生成工具cfgmaker 如何使用cfgmaker工具来创建你所需要的mrtg的配置文件.   内容cfgmaker的说明 配置 过滤器的详细介绍 预定义的过滤器名称 各种过滤器的例 ...

  9. datafactory生成mysql数据_测试数据生成工具DataFactory的使用

    DATA FACTORY的使用 Data Factor y是一个数据库测试数据生成工具. Data Factory主要可以利用在以下两个方面:1.按照数据表中要求数据的格式,快速产生标准或不标准的测试 ...

最新文章

  1. 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )
  2. hive Illegal Operation state transition from CLOSED to ERROR的处理
  3. C++中结构体、联合体、枚举的区别
  4. 钱穆的中学读书事(作者王国华)
  5. [Java基础]为什么会出现字符流?与编码表介绍
  6. (JAVA)File类2
  7. 正弦光栅的生成matlab,matlab做正弦光栅衍射的计算机模拟
  8. linux系统端口更换,在Linux中怎样修改httpd的端口号
  9. vue 刷新echarts_用Vue开发动态刷新Echarts组件(以及修改时遇到的问题)
  10. 程序员不会SQL?骨灰级工程师:全等着被淘汰吧!这是必会技能!
  11. UEA1224——郭恩赐 day06 作业
  12. 2、深入理解 Laravel Eloquent(二)——中间操作流(Builder)
  13. 判断没登录就跳转php,PHP实例:PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)...
  14. SQL Server 软件环境安装与配置
  15. Python 中的 dbm 模块
  16. GRUB4DOS使用大全
  17. CS224d-Day 2:TensorFlow 入门
  18. 使用Flying Saucer生成pdf
  19. uni-app 中如何使用谷歌地图 !?
  20. 动态生成表格案例(HTML+CSS+JS)

热门文章

  1. MATLAB|用循环描点画波形图
  2. Java爬虫——人人网模拟登录
  3. 经典再读 | 认知控制和失匹配对N2成分的影响
  4. es6 Promise是什么?
  5. 【行研资料】智能家居的未来(英文)——附下载
  6. 视频教程-Project-规划项目(基本操作)-Office/WPS
  7. web快速入门之基础篇-html:2、基本标签之标题标签、段落标签、换行标签
  8. systemverilog中的时间单位和时间精度
  9. C语言对时间单位的换算
  10. html博客设计论文,个人博客网站(论文).doc