using UnityEditor;
using UnityEngine;
using XGame.Editor.Asset;
namespace FL.Editor
{
///
/// 纹理资源属性预设
///
public partial class FLAssetPostprocessor : AssetPostprocessor
{
///
/// Assets相对路径前缀
///
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();
//}
}
}
}