Синтаксис:
Используется csharp
#region OptiPNG
static void OptiPNG(string path) {
string fileName = Application.dataPath + "/OptiPNG/optipng.exe";
Process opti = new Process();
try {
opti.StartInfo.FileName = fileName;
opti.StartInfo.Arguments = path;
opti.StartInfo.CreateNoWindow = true;
opti.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
opti.Start();
} catch (Exception e) {
Debug.LogErrorFormat("{0} exe: {1} param: {2}", e.Message, fileName, path);
}
}
[MenuItem("Assets/OptiPNG", true)]
public static bool OptiPNG_Validator() {
string[] guids = Selection.assetGUIDs;
string path;
for (int i = 0; i < guids.Length; i++) {
path = AssetDatabase.GUIDToAssetPath(guids[i]);
if (path.Contains(".png") || Directory.Exists(path)) return true;
}
return false;
}
[MenuItem("Assets/OptiPNG")]
public static void OptiPNG_Menu() {
string[] guids = Selection.assetGUIDs;
string path;
for (int i = 0; i < guids.Length; i++) {
EditorUtility.DisplayProgressBar("Optimizing PNG", i + "/" + guids.Length, (float)i / guids.Length);
path = AssetDatabase.GUIDToAssetPath(guids[i]);
if (path.Contains(".png")) {
path = new DirectoryInfo(path).FullName;
OptiPNG(path);
} else {
if (Directory.Exists(path)) {
OptiPNG(new DirectoryInfo(path).FullName + "/*.png");
foreach (DirectoryInfo d in new DirectoryInfo(path).GetDirectories("*", SearchOption.AllDirectories)) {
OptiPNG(d.FullName + "/*.png");
}
}
}
}
EditorUtility.ClearProgressBar();
}
#endregion
static void OptiPNG(string path) {
string fileName = Application.dataPath + "/OptiPNG/optipng.exe";
Process opti = new Process();
try {
opti.StartInfo.FileName = fileName;
opti.StartInfo.Arguments = path;
opti.StartInfo.CreateNoWindow = true;
opti.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
opti.Start();
} catch (Exception e) {
Debug.LogErrorFormat("{0} exe: {1} param: {2}", e.Message, fileName, path);
}
}
[MenuItem("Assets/OptiPNG", true)]
public static bool OptiPNG_Validator() {
string[] guids = Selection.assetGUIDs;
string path;
for (int i = 0; i < guids.Length; i++) {
path = AssetDatabase.GUIDToAssetPath(guids[i]);
if (path.Contains(".png") || Directory.Exists(path)) return true;
}
return false;
}
[MenuItem("Assets/OptiPNG")]
public static void OptiPNG_Menu() {
string[] guids = Selection.assetGUIDs;
string path;
for (int i = 0; i < guids.Length; i++) {
EditorUtility.DisplayProgressBar("Optimizing PNG", i + "/" + guids.Length, (float)i / guids.Length);
path = AssetDatabase.GUIDToAssetPath(guids[i]);
if (path.Contains(".png")) {
path = new DirectoryInfo(path).FullName;
OptiPNG(path);
} else {
if (Directory.Exists(path)) {
OptiPNG(new DirectoryInfo(path).FullName + "/*.png");
foreach (DirectoryInfo d in new DirectoryInfo(path).GetDirectories("*", SearchOption.AllDirectories)) {
OptiPNG(d.FullName + "/*.png");
}
}
}
}
EditorUtility.ClearProgressBar();
}
#endregion
Выделяем каталог или png файлы в StreamingAssets (все же понимают, что в других местах оптимизировать нет смысла?) щелкаем ПКМ и в меню выбираем OptiPNG. В случае каталога, будут обработаны файлы в том числе во всех подкаталогах.
OptiPngExample.zip
Не из юнити можно использовать FileOptimizer