ro-webgl/Assets/Editor/TPEditor/BuildTexturePacker.cs
2021-12-21 09:40:39 +08:00

74 lines
3.0 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
using System.IO;
using UnityEditor;
using System.Text;
using System.Diagnostics;
public class CommandBuild : Editor
{
public static string inputPath = string.Format("{0}/Content/Raw_Art/UI", Application.dataPath);//小图目录
public static string outputPath = string.Format("{0}/Content/Altas", Application.dataPath);//用TP打包好的图集存放目录
[MenuItem("Tools/SpritesPacker/CommandBuild")]
public static void BuildTexturePacker()
{
//选择并设置TP命令行的参数和参数值
string commandText = " --sheet {0}.png --data {1}.xml --format sparrow --trim-mode None --pack-mode Best --smart-update --algorithm MaxRects --max-size 2048 --size-constraints POT --disable-rotation --scale 1 {2}";
string[] imagePath = Directory.GetDirectories (inputPath);
for (int i = 0; i < imagePath.Length; ++i)
{
UnityEngine.Debug.Log (imagePath [i]);
StringBuilder sb = new StringBuilder("");
string[] fileName = Directory.GetFiles(imagePath[i]);
for (int j = 0; j < fileName.Length; ++j)
{
string extenstion = Path.GetExtension(fileName[j]);
if (extenstion == ".png")
{
sb.Append(fileName[j]);
sb.Append(" ");
UnityEngine.Debug.Log("fileName [j]:" + fileName[j]);
}
}
string name = Path.GetFileName(imagePath [i]);
string outputName = string.Format ("{0}/{1}", outputPath, name);
string sheetName = string.Format("{0}/TP/SheetsByTP/{1}", Application.dataPath, name);
//执行命令行
processCommand("D:/TexturePacker/bin/TexturePacker.exe", string.Format(commandText, sheetName, sheetName, sb.ToString()));
}
AssetDatabase.Refresh();
}
private static void processCommand(string command, string argument)
{
ProcessStartInfo start = new ProcessStartInfo(command);
start.Arguments = argument;
start.CreateNoWindow = false;
start.ErrorDialog = true;
start.UseShellExecute = false;
if(start.UseShellExecute){
start.RedirectStandardOutput = false;
start.RedirectStandardError = false;
start.RedirectStandardInput = false;
} else{
start.RedirectStandardOutput = true;
start.RedirectStandardError = true;
start.RedirectStandardInput = true;
start.StandardOutputEncoding = System.Text.UTF8Encoding.UTF8;
start.StandardErrorEncoding = System.Text.UTF8Encoding.UTF8;
}
Process p = Process.Start(start);
if(!start.UseShellExecute)
{
UnityEngine.Debug.Log(p.StandardOutput.ReadToEnd());
UnityEngine.Debug.Log(p.StandardError.ReadToEnd());
}
p.WaitForExit();
p.Close();
}
}
#endif