123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- using UnityEditor;
- using UnityEngine;
- using XGame.Editor.Asset.Tools;
- namespace FL.Editor
- {
- /// <summary>
- /// 纹理资源属性预设
- /// </summary>
- public partial class FLAssetPostprocessor : AssetPostprocessor
- {
- /// <summary>
- /// Assets相对路径前缀
- /// </summary>
- private const string ResRelative = "Assets/Res/";
- private const string i18nRelative = "Assets/i18n/";
-
- private const string Readable = "readable";
- private const string Mipmap = "mipmap";
-
- private const string UIAtlas = "/Atlas/";
-
- private const string Sprites = "/Sprites/";
-
- private const string Textures = "/Textures/";
- private const string FGUITextures = "/Addressable/FGUI/";
-
- private const string SpineTextures = "/Spines/";
-
- private const int AtlasTextureMaxSize = 512;
- private const int TextureMaxSize = 2048;
- private const TextureImporterFormat HaveAlphaSettingFormat = TextureImporterFormat.ASTC_6x6;
- private const TextureImporterFormat AndroidNoAlphaSettingFormat = TextureImporterFormat.ETC2_RGB4;
- private const TextureImporterFormat IosNoAlphaSettingFormat = TextureImporterFormat.ASTC_6x6;
-
- private void OnPreprocessTexture()
- {
- if (!assetPath.StartsWith(ResRelative))
- return;
- // CheckTextureAlpha(assetPath);
- var textureImporter = (TextureImporter)assetImporter;
- textureImporter.isReadable = assetPath.ToLower().Contains(Readable);
- textureImporter.anisoLevel = 1;
- var haveAlpha = textureImporter.DoesSourceTextureHaveAlpha();
-
- #region Atlas
-
- if (assetPath.Contains(UIAtlas))
- {
- textureImporter.textureType = TextureImporterType.Sprite;
- textureImporter.spriteImportMode = SpriteImportMode.Single;
- textureImporter.mipmapEnabled = false;
- var defaultSetting = textureImporter.GetDefaultPlatformTextureSettings();
- defaultSetting.format = TextureImporterFormat.Automatic;
- defaultSetting.textureCompression = TextureImporterCompression.Uncompressed;
- defaultSetting.maxTextureSize = AtlasTextureMaxSize;
- textureImporter.SetPlatformTextureSettings(defaultSetting);
-
- return;
- }
-
- #endregion
-
- #region Sprite
-
- if (assetPath.Contains(Sprites))
- {
- textureImporter.textureType = TextureImporterType.Sprite;
- textureImporter.spriteImportMode = SpriteImportMode.Single;
- textureImporter.mipmapEnabled = false;
- textureImporter.npotScale = TextureImporterNPOTScale.None;
- var defaultSetting = textureImporter.GetDefaultPlatformTextureSettings();
- defaultSetting.format = TextureImporterFormat.Automatic;
- defaultSetting.textureCompression = TextureImporterCompression.Compressed;
- defaultSetting.maxTextureSize = TextureMaxSize;
- textureImporter.SetPlatformTextureSettings(defaultSetting);
- //ios
- var iosSetting = textureImporter.GetPlatformTextureSettings("iOS");
- iosSetting.overridden = true;
- iosSetting.format = haveAlpha ? HaveAlphaSettingFormat : IosNoAlphaSettingFormat;
- iosSetting.textureCompression = TextureImporterCompression.Compressed;
- iosSetting.maxTextureSize = TextureMaxSize;
- textureImporter.SetPlatformTextureSettings(iosSetting);
- //Android
- var androidSetting = textureImporter.GetPlatformTextureSettings("Android");
- androidSetting.overridden = true;
- androidSetting.format = haveAlpha ? HaveAlphaSettingFormat : AndroidNoAlphaSettingFormat;
- androidSetting.textureCompression = TextureImporterCompression.Compressed;
- androidSetting.maxTextureSize = TextureMaxSize;
- textureImporter.SetPlatformTextureSettings(androidSetting);
-
- return;
- }
- #endregion
- #region Texture
- if (assetPath.Contains(Textures) || assetPath.Contains(FGUITextures))
- {
- textureImporter.textureType = TextureImporterType.Default;
- // Unity导入贴图默认使用的sprite,切换为Default时会开启mipmapEnabled,因此需要在设置textureType后再设置mipmapEnabled
- textureImporter.mipmapEnabled = assetPath.ToLower().Contains(Mipmap);
- var defaultSetting = textureImporter.GetDefaultPlatformTextureSettings();
- defaultSetting.format = TextureImporterFormat.Automatic;
- defaultSetting.textureCompression = TextureImporterCompression.Compressed;
- defaultSetting.maxTextureSize = TextureMaxSize;
- textureImporter.SetPlatformTextureSettings(defaultSetting);
- //ios
- var iosSetting = textureImporter.GetPlatformTextureSettings("iOS");
- iosSetting.overridden = true;
- iosSetting.format = haveAlpha ? HaveAlphaSettingFormat : IosNoAlphaSettingFormat;
- iosSetting.textureCompression = TextureImporterCompression.Compressed;
- iosSetting.maxTextureSize = TextureMaxSize;
- textureImporter.SetPlatformTextureSettings(iosSetting);
- //Android
- var androidSetting = textureImporter.GetPlatformTextureSettings("Android");
- androidSetting.overridden = true;
- androidSetting.format = haveAlpha ? HaveAlphaSettingFormat : AndroidNoAlphaSettingFormat;
- androidSetting.textureCompression = TextureImporterCompression.Compressed;
- androidSetting.maxTextureSize = TextureMaxSize;
- textureImporter.SetPlatformTextureSettings(androidSetting);
-
- return;
- }
- #endregion
- #region Spine
- return;
- if (assetPath.Contains(SpineTextures))
- {
- textureImporter.textureType = TextureImporterType.Default;
- // Unity导入贴图默认使用的sprite,切换为Default时会开启mipmapEnabled,因此需要在设置textureType后再设置mipmapEnabled
- textureImporter.mipmapEnabled = assetPath.ToLower().Contains(Mipmap);
- textureImporter.npotScale = TextureImporterNPOTScale.None;
- var defaultSetting = textureImporter.GetDefaultPlatformTextureSettings();
- defaultSetting.format = TextureImporterFormat.Automatic;
- defaultSetting.textureCompression = TextureImporterCompression.CompressedHQ;
- defaultSetting.maxTextureSize = TextureMaxSize;
- textureImporter.SetPlatformTextureSettings(defaultSetting);
- //ios
- var iosSetting = textureImporter.GetPlatformTextureSettings("iOS");
- iosSetting.overridden = true;
- iosSetting.format = haveAlpha ? HaveAlphaSettingFormat : IosNoAlphaSettingFormat;
- iosSetting.textureCompression = TextureImporterCompression.CompressedHQ;
- iosSetting.maxTextureSize = TextureMaxSize;
- textureImporter.SetPlatformTextureSettings(iosSetting);
- //Android
- var androidSetting = textureImporter.GetPlatformTextureSettings("Android");
- androidSetting.overridden = true;
- androidSetting.format = haveAlpha ? HaveAlphaSettingFormat : AndroidNoAlphaSettingFormat;
- androidSetting.compressionQuality = 100; //这个参数是百分比的意思,100的时候才能保持贴图精度
- androidSetting.textureCompression = TextureImporterCompression.CompressedHQ;
- androidSetting.maxTextureSize = TextureMaxSize;
- textureImporter.SetPlatformTextureSettings(androidSetting);
- }
- #endregion
- }
- private void OnPostprocessTexture(Texture2D texture)
- {
- //检测texture
- var task = new TextureVerifyTask();
- task.VerifyTextureByPath(assetPath);
- //Packages 文件夹下不判断
- //if (assetPath.Contains("Packages"))
- // return;
- //if (assetPath.ToLower().Contains("atlas"))
- // return;
- //if (EditorUtility.DisplayDialog(title, message, confirm))
- //{
- // AssetDatabase.DeleteAsset(assetPath);
- // AssetDatabase.Refresh();
- //}
- }
- }
- }
|