283 lines
11 KiB
C#
283 lines
11 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Text;
|
||
using TextureCombineEditor;
|
||
using UnityEditor;
|
||
using UnityEngine;
|
||
|
||
namespace Thousandto.DIY
|
||
{
|
||
public class ChangeUITextureSize : EditorWindow
|
||
{
|
||
[MenuItem("Ares/UITexture出包优化(出包时前使用优化内存)")]
|
||
static void Open()
|
||
{
|
||
if (Application.isPlaying)
|
||
{
|
||
return;
|
||
}
|
||
var win = (ChangeUITextureSize)EditorWindow.GetWindow(typeof(ChangeUITextureSize));
|
||
LoadWhiteNames();
|
||
win.Show();
|
||
}
|
||
|
||
private string _prefabPath = string.Empty;
|
||
private const string WhiteNameKey = "ChangeUITextureSizeWhiteName";
|
||
private static List<string> _whiteNames = null;
|
||
private string _addWhiteText = string.Empty;
|
||
//保存图片优化白名单的文件
|
||
private static string _whiteTexCfgFile = "../Main/Assets/GameAssets/ExportResources/EditorConfig/TextureConfig.txt";
|
||
|
||
static void LoadWhiteNames()
|
||
{
|
||
_whiteNames = new List<string>();
|
||
if (File.Exists(_whiteTexCfgFile))
|
||
{
|
||
List<string> cfgFileNameList = new List<string>(File.ReadAllLines(_whiteTexCfgFile));
|
||
for (int i = 0; i < cfgFileNameList.Count; i++)
|
||
{
|
||
_whiteNames.Add(cfgFileNameList[i].Trim());
|
||
}
|
||
}
|
||
var names = PlayerPrefs.GetString(WhiteNameKey);
|
||
if (!string.IsNullOrEmpty(names))
|
||
{
|
||
var paramArray = names.Split(';');
|
||
for (int i = 0; i < paramArray.Length; ++i)
|
||
{
|
||
if (!string.IsNullOrEmpty(paramArray[i]) && !_whiteNames.Contains(paramArray[i]))
|
||
{
|
||
_whiteNames.Add(paramArray[i]);
|
||
}
|
||
}
|
||
PlayerPrefs.DeleteKey(WhiteNameKey);
|
||
SaveWhiteNames();
|
||
}
|
||
}
|
||
static void SaveWhiteNames()
|
||
{
|
||
var strBuilder = new StringBuilder(10240);
|
||
for (int i = 0; i < _whiteNames.Count; ++i)
|
||
{
|
||
if (!string.IsNullOrEmpty(_whiteNames[i]))
|
||
{
|
||
strBuilder.AppendLine(_whiteNames[i]);
|
||
}
|
||
}
|
||
if (!File.Exists(_whiteTexCfgFile))
|
||
{
|
||
File.Create(_whiteTexCfgFile).Dispose();
|
||
}
|
||
File.WriteAllText(_whiteTexCfgFile, strBuilder.ToString());
|
||
}
|
||
|
||
void OnGUI()
|
||
{
|
||
EditorGUILayout.BeginVertical();
|
||
EditorGUILayout.LabelField("选择路径");
|
||
EditorGUILayout.Space();
|
||
EditorGUILayout.LabelField("需要优化UITexture路径");
|
||
EditorGUILayout.BeginHorizontal();
|
||
if (GUILayout.Button("浏览", GUILayout.Width(50)))
|
||
{
|
||
_prefabPath = EditorUtility.OpenFolderPanel("ChangeTexture Path", _prefabPath, "");
|
||
}
|
||
if (string.IsNullOrEmpty(_prefabPath))
|
||
{
|
||
EditorGUILayout.LabelField("null...");
|
||
}
|
||
else
|
||
{
|
||
EditorGUILayout.LabelField(_prefabPath);
|
||
}
|
||
EditorGUILayout.EndHorizontal();
|
||
EditorGUILayout.EndVertical();
|
||
|
||
EditorGUILayout.BeginVertical();
|
||
GUILayout.Label("白名单(不压缩,用于带文字的图片)");
|
||
bool isSaveWhite = false;
|
||
if(_whiteNames == null)
|
||
{
|
||
LoadWhiteNames();
|
||
}
|
||
for (int i = _whiteNames.Count - 1; i >= 0; --i)
|
||
{
|
||
EditorGUILayout.BeginHorizontal();
|
||
GUILayout.Label(_whiteNames[i]);
|
||
if (GUILayout.Button("X", GUILayout.Width(30)))
|
||
{
|
||
_whiteNames.RemoveAt(i);
|
||
isSaveWhite = true;
|
||
}
|
||
EditorGUILayout.EndHorizontal();
|
||
}
|
||
EditorGUILayout.BeginHorizontal();
|
||
_addWhiteText = EditorGUILayout.TextField(_addWhiteText);
|
||
if (GUILayout.Button("添加白名单", GUILayout.Width(100)))
|
||
{
|
||
if (!string.IsNullOrEmpty(_addWhiteText) && !_whiteNames.Contains(_addWhiteText))
|
||
{
|
||
_whiteNames.Add(_addWhiteText);
|
||
isSaveWhite = true;
|
||
}
|
||
}
|
||
if (isSaveWhite)
|
||
{
|
||
SaveWhiteNames();
|
||
}
|
||
EditorGUILayout.EndHorizontal();
|
||
EditorGUILayout.EndVertical();
|
||
|
||
|
||
if (GUILayout.Button("开始优化", GUILayout.Width(100)))
|
||
{
|
||
if (string.IsNullOrEmpty(_prefabPath))
|
||
return;
|
||
if (Directory.Exists(_prefabPath))
|
||
{
|
||
DirectoryInfo direction = new DirectoryInfo(_prefabPath);
|
||
FileInfo[] files = direction.GetFiles("*.*", SearchOption.TopDirectoryOnly);
|
||
|
||
var doCount = 0;
|
||
for (int i = 0; i < files.Length; ++i)
|
||
{
|
||
var path = files[i].FullName;
|
||
if (path.EndsWith(".png", StringComparison.CurrentCultureIgnoreCase) || path.EndsWith(".jpg", StringComparison.CurrentCultureIgnoreCase))
|
||
{
|
||
path = path.Replace('\\', '/');
|
||
var starIndex = path.IndexOf("/Assets/", 0);
|
||
path = path.Remove(0, starIndex + 1);
|
||
|
||
var name = files[i].Name;
|
||
starIndex = name.LastIndexOf('.');
|
||
name = name.Remove(starIndex);
|
||
if (SetTextureFormat(path))
|
||
{
|
||
++doCount;
|
||
}
|
||
}
|
||
}
|
||
UnityEngine.Debug.LogErrorFormat("优化完成,共优化{0}张图片", doCount);
|
||
}
|
||
}
|
||
}
|
||
|
||
public static bool SetTextureFormat(string path)
|
||
{
|
||
if(_whiteNames == null)
|
||
{
|
||
LoadWhiteNames();
|
||
}
|
||
path = path.Replace('\\', '/');
|
||
var startIndex = path.LastIndexOf('/');
|
||
var endIndex = path.LastIndexOf('.');
|
||
string fileName = path.Substring(startIndex + 1, endIndex - startIndex - 1);
|
||
|
||
AssetImporter ai = AssetImporter.GetAtPath(path);
|
||
bool isChanged = false;
|
||
if (ai != null && ai is UnityEditor.TextureImporter)
|
||
{
|
||
#if UNITY_STANDALONE
|
||
//pc版本资源不做图片压缩
|
||
if (true)
|
||
#else
|
||
if (_whiteNames.Contains(fileName))
|
||
#endif
|
||
{
|
||
TextureImporter textureImporter = (TextureImporter)ai;
|
||
if (textureImporter.isReadable != false)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.isReadable = false;
|
||
}
|
||
if (textureImporter.textureType != TextureImporterType.GUI)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.textureType = TextureImporterType.GUI;
|
||
}
|
||
if (textureImporter.mipmapEnabled != false)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.mipmapEnabled = false;
|
||
}
|
||
if (textureImporter.alphaSource != TextureImporterAlphaSource.FromInput)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.alphaSource = TextureImporterAlphaSource.FromInput;
|
||
}
|
||
if (textureImporter.alphaIsTransparency != true)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.alphaIsTransparency = true;
|
||
}
|
||
if (textureImporter.npotScale != TextureImporterNPOTScale.None)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.npotScale = TextureImporterNPOTScale.None;
|
||
}
|
||
if (textureImporter.maxTextureSize != 1024)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.maxTextureSize = 1024;
|
||
}
|
||
if (textureImporter.textureCompression != TextureImporterCompression.Uncompressed)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.textureCompression = TextureImporterCompression.Uncompressed;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
TextureImporter textureImporter = (TextureImporter)ai;
|
||
if (textureImporter.isReadable != false)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.isReadable = false;
|
||
}
|
||
if (textureImporter.textureType != TextureImporterType.GUI)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.textureType = TextureImporterType.GUI;
|
||
}
|
||
if (textureImporter.mipmapEnabled != false)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.mipmapEnabled = false;
|
||
}
|
||
if (textureImporter.alphaSource != TextureImporterAlphaSource.FromInput)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.alphaSource = TextureImporterAlphaSource.FromInput;
|
||
}
|
||
if (textureImporter.alphaIsTransparency != true)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.alphaIsTransparency = true;
|
||
}
|
||
if (textureImporter.npotScale != TextureImporterNPOTScale.ToNearest)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.npotScale = TextureImporterNPOTScale.ToNearest;
|
||
}
|
||
if (textureImporter.maxTextureSize != 1024)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.maxTextureSize = 1024;
|
||
}
|
||
if (textureImporter.textureCompression != TextureImporterCompression.Compressed)
|
||
{
|
||
isChanged = true;
|
||
textureImporter.textureCompression = TextureImporterCompression.Compressed;
|
||
}
|
||
}
|
||
if (isChanged)
|
||
{
|
||
AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);
|
||
}
|
||
}
|
||
return isChanged;
|
||
}
|
||
}
|
||
}
|