Unity 图片格式一键设置
项目常常要求工程里面的格式统一设置,研究一段时间,写了改文章,不多说直接上代码
//设置图片格式
private static void SetTextureFormat(TextureImporter textureImporter, Texture2D texture2d,string path,
TextureImporterFormat androidAlpha, TextureImporterFormat androidNoAlpha, TextureImporterFormat iosAlpha, TextureImporterFormat iosNoAlpha)
{
//根据路径获得文件夹目录,设置图集的packagingTag
//string AtlasName = new DirectoryInfo(Path.GetDirectoryName(textureImporter.assetPath)).Name;
bool isTexNeedChange = false;
if (textureImporter.mipmapEnabled == true)
{
textureImporter.mipmapEnabled = false;
isTexNeedChange = true;
}
if (textureImporter.isReadable)
{
textureImporter.isReadable = false;
isTexNeedChange = true;
}
//textureImporter.textureType = TextureImporterType.Default;
///textureImporter.spritePackingTag = AtlasName;
//textureImporter.wrapMode = TextureWrapMode.Clamp;
//textureImporter.npotScale = TextureImporterNPOTScale.None;
//textureImporter.textureFormat = TextureImporterFormat.Automatic;
//textureImporter.textureCompression = TextureImporterCompression.Compressed;
int SizeType = FitSize(1024);
if (texture2d != null)
{
int textureSize = Mathf.Max(texture2d.height, texture2d.width);
SizeType = FitSize(textureSize);
}
bool _isAndroidNeedChange = false;
var isHaveAlpha = textureImporter.DoesSourceTextureHaveAlpha();
var _curAnImporterSet = textureImporter.GetPlatformTextureSettings("Android");
if (_curAnImporterSet.overridden == true && _curAnImporterSet.maxTextureSize == SizeType && _curAnImporterSet.compressionQuality == 100)
{
if (isHaveAlpha && _curAnImporterSet.format == androidAlpha)
{
_isAndroidNeedChange = false;
}
else if (!isHaveAlpha && _curAnImporterSet.format == androidNoAlpha)
{
_isAndroidNeedChange = false;
}
else
{
_isAndroidNeedChange = true;
}
}
else
{
_isAndroidNeedChange = true;
}
if (_isAndroidNeedChange)
{
//Android端单独设置
TextureImporterPlatformSettings setting_android = new TextureImporterPlatformSettings();
setting_android.overridden = true;
setting_android.name = "Android";
setting_android.maxTextureSize = SizeType;
setting_android.compressionQuality = 100;
//根据是否有透明度,选择RGBA还是RGB
if (isHaveAlpha)
{
setting_android.format = androidAlpha;// TextureImporterFormat.ETC2_RGBA8;
}
else
{
setting_android.format = androidNoAlpha;// TextureImporterFormat.ETC2_RGB4;
}
textureImporter.SetPlatformTextureSettings(setting_android);
}
bool _isIosNeedChange = false;
var _curIosImporterSet = textureImporter.GetPlatformTextureSettings("iOS");
if (_curIosImporterSet.overridden == true && _curIosImporterSet.maxTextureSize == SizeType && _curIosImporterSet.compressionQuality == 100)
{
if (isHaveAlpha && _curIosImporterSet.format == iosAlpha)
{
_isIosNeedChange = false;
}
else if (!isHaveAlpha && _curIosImporterSet.format == iosNoAlpha)
{
_isIosNeedChange = false;
}
else
{
_isIosNeedChange = true;
}
}
else
{
_isIosNeedChange = true;
}
if (_isIosNeedChange)
{
//IOS端单独设置
TextureImporterPlatformSettings setting_iphone = new TextureImporterPlatformSettings();
setting_iphone.overridden = true;
setting_iphone.name = "iOS";
setting_iphone.compressionQuality = 100;
setting_iphone.maxTextureSize = SizeType;
//根据是否有透明度,选择RGBA还是RGB
if (textureImporter.DoesSourceTextureHaveAlpha())
{
setting_iphone.format = iosAlpha;// TextureImporterFormat.ASTC_RGBA_5x5;
}
else
{
setting_iphone.format = iosNoAlpha;// TextureImporterFormat.ASTC_RGB_5x5;
}
textureImporter.SetPlatformTextureSettings(setting_iphone);
}
if (isTexNeedChange || _isAndroidNeedChange || _isIosNeedChange)
{
AssetDatabase.ImportAsset(path);
}
}
由于项目中的图片过多,所以很有必要进行对比再设置,一个图片资源已经是需求的设置的话,最好跳过该设置操作,加快设置进度。