纹理自动设置工具

每次导入新的图片资源的时候,都要手动设置压缩格式或者图集。
十分不方便。

故需要一个自动设置的工具。

需要用到的编辑器类: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.按路径区分,是否导出图集。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容