diff --git a/Assets/Scripts/Editor/OptTools/TextureOptTools.cs b/Assets/Scripts/Editor/OptTools/TextureOptTools.cs index 6f38e8ea0a..f1ed1b750b 100644 --- a/Assets/Scripts/Editor/OptTools/TextureOptTools.cs +++ b/Assets/Scripts/Editor/OptTools/TextureOptTools.cs @@ -343,6 +343,251 @@ namespace LJ_OptTools GameEditor.CustomImportSettings.enabled = false; EditorUtility.ClearProgressBar(); } + + #region 图片压缩 + [MenuItem("Assets/图片压缩/UITextue")] + public static void UITexture() + { + DoCompress(0); + } + [MenuItem("Assets/图片压缩/BGSingle")] + public static void BGSingle() + { + DoCompress(1); + } + [MenuItem("Assets/图片压缩/BGMultiple")] + public static void BGMultiple() + { + DoCompress(2); + } + [MenuItem("Assets/图片压缩/SpineTexture")] + public static void SpineTexture() + { + DoCompress(3); + } + + + public static void DoCompress(int cType) + { + var guids = Selection.assetGUIDs; + var filePaths = new List(); + foreach (var id in guids) + { + var path = AssetDatabase.GUIDToAssetPath(id); + if (File.Exists(path)) + { + if (!filePaths.Contains(path)) + filePaths.Add(path); + } + else if (Directory.Exists(path)) + { + var subFileGuids = AssetDatabase.FindAssets("t:Texture", new string[] { path }); + if (subFileGuids != null && subFileGuids.Length > 0) + { + foreach (var subId in subFileGuids) + { + var subPath = AssetDatabase.GUIDToAssetPath(subId); + if (!filePaths.Contains(subPath)) + filePaths.Add(subPath); + } + } + } + } + + if (filePaths.Count < 1) return; + for (int i = 0; i < filePaths.Count; i++) + { + string path = filePaths[i]; + EditorUtility.DisplayProgressBar(string.Format("Opt UI Texture({0}/{1})", i, filePaths.Count), path, i * 1f / filePaths.Count); + TextureImporter ti = (TextureImporter)TextureImporter.GetAtPath(path); + switch (cType) + { + case 0: + SetUITexture(ti); + break; + case 1: + SetBGSingle(ti); + break; + case 2: + SetBGMultiple(ti); + break; + case 3: + SetSpineTexture(ti); + break; + + } + + AssetDatabase.ImportAsset(path); + } + EditorUtility.ClearProgressBar(); + + } + + /// + /// 设置UI图片自动图集名称,与图片格式 + /// + /// + public static string GetAtlasName(string assetPath) + { + int index = assetPath.IndexOf("/Atlas/"); + string atlasName = assetPath.Substring(index + 7); + index = atlasName.IndexOf("/"); + if (index != -1) + { + atlasName = atlasName.Substring(0, index); + } + return atlasName; + } + + static void SetUITexture(TextureImporter importer) + { + importer.spritePackingTag = GetAtlasName(importer.assetPath); + + TextureImporterSettings importerSettings = new TextureImporterSettings(); + importer.ReadTextureSettings(importerSettings); + importerSettings.npotScale = TextureImporterNPOTScale.None; + importerSettings.spriteMode = 1;//Single + importerSettings.spritePixelsPerUnit = GameLogic.AppConst.PIXELTOWORLD; + importerSettings.mipmapEnabled = false; + importerSettings.wrapMode = TextureWrapMode.Clamp; + importerSettings.filterMode = FilterMode.Trilinear; + importerSettings.alphaIsTransparency = true; + importer.SetTextureSettings(importerSettings); + + //Android + TextureImporterPlatformSettings s_Android = new TextureImporterPlatformSettings(); + s_Android.name = "Android"; + s_Android.maxTextureSize = 2048; + s_Android.format = TextureImporterFormat.ETC2_RGBA8Crunched; + s_Android.compressionQuality = 50; + s_Android.allowsAlphaSplitting = false; + s_Android.overridden = true; + importer.SetPlatformTextureSettings(s_Android); + + //IOS + TextureImporterPlatformSettings s_IOS = new TextureImporterPlatformSettings(); + s_IOS.name = "iPhone"; + s_IOS.maxTextureSize = 2048; + s_IOS.format = TextureImporterFormat.PVRTC_RGBA4; + s_IOS.compressionQuality = 50; + s_IOS.allowsAlphaSplitting = false; + s_IOS.overridden = true; + importer.SetPlatformTextureSettings(s_IOS); + } + + + static void SetBGSingle(TextureImporter importer) + { + importer.spritePackingTag = string.Empty; + + TextureImporterSettings importerSettings = new TextureImporterSettings(); + importer.ReadTextureSettings(importerSettings); + importerSettings.npotScale = TextureImporterNPOTScale.None; + importerSettings.spriteMode = 1;//Single + importerSettings.spritePixelsPerUnit = GameLogic.AppConst.PIXELTOWORLD; + importerSettings.mipmapEnabled = false; + importerSettings.wrapMode = TextureWrapMode.Clamp; + importerSettings.filterMode = FilterMode.Trilinear; + importerSettings.alphaIsTransparency = true; + importer.SetTextureSettings(importerSettings); + + //Android + TextureImporterPlatformSettings s_Android = new TextureImporterPlatformSettings(); + s_Android.name = "Android"; + s_Android.maxTextureSize = 2048; + s_Android.format = TextureImporterFormat.ETC2_RGBA8Crunched; + s_Android.compressionQuality = 50; + s_Android.allowsAlphaSplitting = false; + s_Android.overridden = true; + importer.SetPlatformTextureSettings(s_Android); + + //IOS + TextureImporterPlatformSettings s_IOS = new TextureImporterPlatformSettings(); + s_IOS.name = "iPhone"; + s_IOS.maxTextureSize = 2048; + s_IOS.format = TextureImporterFormat.ASTC_RGBA_8x8; + s_IOS.compressionQuality = 50; + s_IOS.allowsAlphaSplitting = false; + s_IOS.overridden = true; + importer.SetPlatformTextureSettings(s_IOS); + } + static void SetBGMultiple(TextureImporter importer) + { + importer.spritePackingTag = string.Empty; + + TextureImporterSettings importerSettings = new TextureImporterSettings(); + importer.ReadTextureSettings(importerSettings); + importerSettings.npotScale = TextureImporterNPOTScale.None; + importerSettings.spriteMode = 2;//Multiple + importerSettings.spritePixelsPerUnit = GameLogic.AppConst.PIXELTOWORLD; + importerSettings.mipmapEnabled = false; + importerSettings.wrapMode = TextureWrapMode.Clamp; + importerSettings.filterMode = FilterMode.Trilinear; + importerSettings.alphaIsTransparency = true; + importer.SetTextureSettings(importerSettings); + + //Android + TextureImporterPlatformSettings s_Android = new TextureImporterPlatformSettings(); + s_Android.name = "Android"; + s_Android.maxTextureSize = 2048; + s_Android.format = TextureImporterFormat.ETC2_RGBA8Crunched; + s_Android.compressionQuality = 50; + s_Android.allowsAlphaSplitting = false; + s_Android.overridden = true; + importer.SetPlatformTextureSettings(s_Android); + + //IOS + TextureImporterPlatformSettings s_IOS = new TextureImporterPlatformSettings(); + s_IOS.name = "iPhone"; + s_IOS.maxTextureSize = 2048; + s_IOS.format = TextureImporterFormat.ASTC_RGBA_8x8; + s_IOS.compressionQuality = 50; + s_IOS.allowsAlphaSplitting = false; + s_IOS.overridden = true; + importer.SetPlatformTextureSettings(s_IOS); + } + + static void SetSpineTexture(TextureImporter importer) + { + importer.spritePackingTag = string.Empty; + + TextureImporterSettings importerSettings = new TextureImporterSettings(); + importer.ReadTextureSettings(importerSettings); + importerSettings.npotScale = TextureImporterNPOTScale.None; + importerSettings.spriteMode = 1;//Single + importerSettings.spritePixelsPerUnit = GameLogic.AppConst.PIXELTOWORLD; + importerSettings.mipmapEnabled = false; + importerSettings.wrapMode = TextureWrapMode.Clamp; + importerSettings.filterMode = FilterMode.Trilinear; + importerSettings.alphaIsTransparency = true; + importer.SetTextureSettings(importerSettings); + + //Android + TextureImporterPlatformSettings s_Android = new TextureImporterPlatformSettings(); + s_Android.name = "Android"; + s_Android.maxTextureSize = 2048; + s_Android.format = TextureImporterFormat.ASTC_RGBA_5x5; + s_Android.compressionQuality = 50; + s_Android.allowsAlphaSplitting = false; + s_Android.overridden = true; + importer.SetPlatformTextureSettings(s_Android); + + //IOS + TextureImporterPlatformSettings s_IOS = new TextureImporterPlatformSettings(); + s_IOS.name = "iPhone"; + s_IOS.maxTextureSize = 2048; + s_IOS.format = TextureImporterFormat.ASTC_RGBA_5x5; + s_IOS.compressionQuality = 50; + s_IOS.allowsAlphaSplitting = false; + s_IOS.overridden = true; + importer.SetPlatformTextureSettings(s_IOS); + } + + + #endregion + + + } }