using System; using System.IO; using System.Collections.Generic; using System.Text.RegularExpressions; using UnityEngine; using UnityEditor; using GameLogic; namespace GameEditor { public class CustomImportSettings : AssetPostprocessor { const int MAX_TEXTURE_SIZE = 2048; public static bool enabled = true; private static Regex MAP_TEXTURE = new Regex(@"Map/[\d]*/"); private static TextureImporterSettings importerSettings = new TextureImporterSettings(); /// /// 图片处理 /// private static Dictionary> handlers = new Dictionary> { {"/ArtFont_en/", SetUITexture}, {"/ArtFont_vi/", SetUITexture}, //UI {"/Atlas/", SetUITexture}, {"/BG/", SetBGTexture}, {"/DynamicAtlas/", SetBGTexture}, {"/Fonts/", SetUITexture}, }; void OnPreprocessAudio() { AudioImporter audioImporter = assetImporter as AudioImporter; SetAudio(audioImporter); } //音频导入后处理 public void OnPostprocessAudio(AudioClip clip) { } void OnPreprocessTexture() { if (!enabled) return; TextureImporter importer = assetImporter as TextureImporter; UpdateTextureSetting(importer, assetPath); } private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromPath) { foreach (string move in movedAssets) { //这里重新 import一下 AssetDatabase.ImportAsset(move); } } /// /// 设置UI图片自动图集名称,与图片格式 /// static void SetUITexture(TextureImporter importer, string path) { importer.spritePackingTag = GetAtlasName(importer.assetPath); importer.SetTextureSettingsExt(true, TextureImporterType.Sprite, 1, AppConst.PIXELTOWORLD, false, TextureWrapMode.Clamp, FilterMode.Trilinear, TextureImporterNPOTScale.None); importer.SetPlatformSettingsExt("Android", TextureImporterFormat.ETC2_RGBA8Crunched, MAX_TEXTURE_SIZE, 50, false); importer.SetPlatformSettingsExt("iPhone", TextureImporterFormat.ASTC_RGBA_6x6, MAX_TEXTURE_SIZE, 50, false); //importer.SetPlatformSettingsExt("Standalone", TextureImporterFormat.RGBA32, MAX_TEXTURE_SIZE, 50, false); } /// /// 设置SpritePacker打包好的图集 /// /// /// static void SetMultipleSprite(TextureImporter importer, string path) { importer.spritePackingTag = string.Empty; importer.SetTextureSettingsExt(true, TextureImporterType.Sprite, 2, AppConst.PIXELTOWORLD, false, TextureWrapMode.Clamp, FilterMode.Trilinear, TextureImporterNPOTScale.None); //importer.SetPlatformSettingsExt("Android", TextureImporterFormat.ETC2_RGBA8Crunched, MAX_TEXTURE_SIZE, 50, false); //importer.SetPlatformSettingsExt("iPhone", TextureImporterFormat.ETC2_RGBA8Crunched, MAX_TEXTURE_SIZE, 50, false); //importer.SetPlatformSettingsExt("Standalone", TextureImporterFormat.DXT5, MAX_TEXTURE_SIZE, 50, false); } /// /// 设置UI图片自动图集名称,与图片格式 /// static void SetBGTexture(TextureImporter importer, string path) { importer.spritePackingTag = string.Empty; //GetAtlasName(importer.assetPath); importer.SetTextureSettingsExt(true, TextureImporterType.Sprite, 1, AppConst.PIXELTOWORLD, false, TextureWrapMode.Clamp, FilterMode.Trilinear, TextureImporterNPOTScale.None); importer.SetPlatformSettingsExt("Android", TextureImporterFormat.ETC2_RGBA8Crunched, MAX_TEXTURE_SIZE, 50, false); importer.SetPlatformSettingsExt("iPhone", TextureImporterFormat.ASTC_RGBA_8x8, MAX_TEXTURE_SIZE, 50, false); importer.SetPlatformSettingsExt("Standalone", TextureImporterFormat.RGBA32, MAX_TEXTURE_SIZE, 50, false); } public void SetAudio(AudioImporter audioImporter) { //audioImporter.SetAudioSettingExt("Android",AudioClipLoadType.Streaming); //audioImporter.SetAudioSettingExt("iPhone", AudioClipLoadType.Streaming); //audioImporter.SetAudioSettingExt("Standalone", AudioClipLoadType.Streaming); } 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; } /// /// 更新一张图片设置 /// public static void UpdateTextureSetting(TextureImporter importer, string assetPath) { importer.spritePackingTag = string.Empty; foreach (var each in handlers) { if (importer.assetPath.Contains(each.Key)) { each.Value(importer, each.Key); break; } } } } public static class ImporterExt { /// /// 更改音效设置 /// /// /// /// public static void SetAudioSettingExt(this AudioImporter importer, string platform, AudioClipLoadType loadType) { AudioImporterSampleSettings settings = importer.GetOverrideSampleSettings(platform); settings.loadType = loadType; importer.SetOverrideSampleSettings(platform, settings); } /// /// 设置Texture参数 /// /// /// /// /// /// /// /// /// public static void SetTextureSettingsExt(this TextureImporter importer, bool alphaIsTransparency, TextureImporterType type, int spriteMode, float spritePixelsPerUnit, bool mipmapEnabled, TextureWrapMode wrapMode, FilterMode filterMode, TextureImporterNPOTScale noptScale) { TextureImporterSettings importerSettings = new TextureImporterSettings(); importer.ReadTextureSettings(importerSettings); importerSettings.npotScale = noptScale; importerSettings.spriteMode = spriteMode; importerSettings.spritePixelsPerUnit = spritePixelsPerUnit; importerSettings.mipmapEnabled = mipmapEnabled; importerSettings.wrapMode = wrapMode; importerSettings.filterMode = filterMode; importerSettings.alphaIsTransparency = alphaIsTransparency; importer.SetTextureSettings(importerSettings); } /// /// 设置平台参数 /// /// /// /// /// /// /// /// public static void SetPlatformSettingsExt(this TextureImporter importer, string platform, TextureImporterFormat format, int maxSize, int compressionQuality, bool allowsAlphaSplitting) { TextureImporterPlatformSettings settings = new TextureImporterPlatformSettings(); settings.name = platform; settings.maxTextureSize = maxSize; settings.format = format; settings.compressionQuality = compressionQuality; settings.allowsAlphaSplitting = allowsAlphaSplitting; settings.overridden = true; importer.SetPlatformTextureSettings(settings); } } }