每次导入新的图片资源的时候,都要手动设置压缩格式或者图集。
十分不方便。
故需要一个自动设置的工具。
需要用到的编辑器类:AssetPostprocessor,资源导入的一个管理器。
资源导入之前和之后可以根据导入的资源做一些设置和一些数据的修改,比如网格,纹理的压缩,模型添加组件等。
不扯那么多没有用的,实现代码如下:
创建一个类,继承 AssetPostprocessor。
public class MyAssetProcessor : AssetPostprocessor
重写 OnPreprocessTexture 方法。
private void OnPreprocessTexture()
{
//Debug.Log("OnPreprocessTexture");
var textureImporter = (TextureImporter)assetImporter;
if (textureImporter.assetPath.Contains("GameRes/Sprite"))
{
textureImporter.isReadable = false;
textureImporter.textureType = TextureImporterType.Sprite;
textureImporter.spriteImportMode = SpriteImportMode.Single;
string temp = textureImporter.assetPath.Remove(textureImporter.assetPath.LastIndexOf("/"));
string tag = temp.Remove(0, temp.LastIndexOf("/") + 1);
textureImporter.spritePackingTag = tag;
}
else if (textureImporter.assetPath.Contains("GameRes/Sprite/NoMerge"))
{
textureImporter.isReadable = false;
textureImporter.textureType = TextureImporterType.Sprite;
textureImporter.spriteImportMode = SpriteImportMode.Single;
string temp = Path.GetFileNameWithoutExtension(textureImporter.assetPath);
textureImporter.spritePackingTag = temp;
}
//ANDROID
TextureImporterFormat format;
int outTextureSize;
TextureImporterFormat outFormat;
if (textureImporter.DoesSourceTextureHaveAlpha())
{
format = TextureImporterFormat.ETC2_RGBA8;
}
else
{
format = TextureImporterFormat.ETC2_RGB4;
}
textureImporter.GetPlatformTextureSettings("Android", out outTextureSize, out outFormat);
TextureImporterPlatformSettings settings = new TextureImporterPlatformSettings();
settings.name = "Android";
settings.format = format;
if (outTextureSize == 0)
{
TextureImporterPlatformSettings dsettings = textureImporter.GetDefaultPlatformTextureSettings(
outTextureSize = dsettings.maxTextureSize;
}
settings.maxTextureSize = outTextureSize;
settings.crunchedCompression = true;
settings.overridden = true;
if (!forSpineTexture)
textureImporter.SetPlatformTextureSettings(settings);
//IOS
if (textureImporter.DoesSourceTextureHaveAlpha())
{
format = TextureImporterFormat.ASTC_RGBA_8x8;
}
else
{
format = TextureImporterFormat.ASTC_RGB_8x8;
}
textureImporter.GetPlatformTextureSettings("iPhone", out outTextureSize, out outFormat);
settings = new TextureImporterPlatformSettings();
settings.name = "iPhone";
settings.format = format;
if (outTextureSize == 0)
{
TextureImporterPlatformSettings dsettings = textureImporter.GetDefaultPlatformTextureSettings(
outTextureSize = dsettings.maxTextureSize;
}
settings.maxTextureSize = outTextureSize;
settings.crunchedCompression = true;
settings.overridden = true;
textureImporter.SetPlatformTextureSettings(settings);
}
注意:
1.Android默认是ETC2,看透明通道使用RGB或者RGBA。
2.IOS默认是ASTC,清晰度不够可以使用ASTC 4 * 4。
3.不同平台可以同时设置。
4.按路径区分,是否导出图集。