UEDL16——AssetImporter 和 AssetPostprocessor

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
AssetPostprocessor                    //主要用于处理资源导入时的通用逻辑,我们可以通过继承该类,并实现其中的一些回调方法来自定义处理资源
assetPostprocessor.assetImporter //对应类型的资源导入器对象(AssetImporter类型),通过该属性来设置导入的资源
assetPostprocessor.assetPath //导入资源的路径。该属性常用于导入资源时执行了回调函数后获取到导入资源的路径
OnPreprocessTexture() { } //继承AssetPostprocessor的类声明该方法,导入纹理资源之前会调用,允许修改纹理的导入设置
OnPostprocessTexture() { } //继承AssetPostprocessor的类声明该方法,导入纹理资源之后调用,允许你对导入后为其进行后处理
OnPreprocessModel() { } //继承AssetPostprocessor的类声明该方法,导入模型资源之前调用,允许修改模型的导入设置
OnPostprocessModel() { } //继承AssetPostprocessor的类声明该方法,导入模型资源之后调用,允许你对导入后为其进行后处理
OnPreprocessAudio() { } //继承AssetPostprocessor的类声明该方法,导入音频资源之前调用,允许修改音频的导入设置
OnPostprocessAudio() { } //继承AssetPostprocessor的类声明该方法,导入音频资源之后调用,允许你对导入后为其进行后处理
AssetImporter //特定资源类型的资源导入程序的基类,它提供了一些方法和属性,用于配置和管理资源的导入设置
TextureImporter //用于导入纹理资源,并配置纹理的压缩格式、尺寸、平铺方式等设置
ModelImporter //用于导入模型资源,并配置模型的导入设置,如网格、材质、动画等
AudioImporter //用于导入音频资源,并配置音频的导入设置,如压缩格式、音频质量等
VideoClipImporter //用于导入视频资源,并配置视频的导入设置,如视频质量、循环模式等
ScriptedImporter //用于创建自定义的资源导入器,可以通过编写脚本来实现对特定类型资源的导入设置和处理逻辑

AssetImporter 和 AssetPostprocessor 资源导入设置拓展

AssetImporter​ 和 AssetPostprocessor​ 是需要配合进行使用的,它们主要是用于处理

  1. 资源导入批量设置(对导入的资源进行统一设置)

    例如将导入的贴图文件纹理类型(Texture Type)统一修改为Sprite(2D and UI)

  2. 资源导入后处理(对导入的资源进行统一的预处理)

    操作资源文件本身的数据,例如统一将贴图一分为二,修改纹理格式、尺寸、压缩等等

AssetPostprocessor(资源后处理器类)

它主要用于处理资源导入时的通用逻辑,我们可以通过继承该类,并实现其中的一些回调方法来自定义处理资源
我们一般会进行以下处理:

  1. 进行某种类型资源的通用设置
  2. 对某种类型资源进行统一批量的处理

注意:如果只想对某种资源中的某些内容进行处理,可以自己加命名规则

AssetPostprocessor​ 的更多内容:

继承AssetPostprocessor后的常用属性

  • assetImporter​:对应类型的资源导入器对象(AssetImporter​类型)

    我们可以通过该属性来设置导入的资源,效果就相当于在Inspector窗口上设置资源一样
    假设我们要修改导入的贴图为Sprite,并关闭Mipmap

    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void OnPreprocessTexture()
    {
    Debug.Log("纹理设置回调" + assetPath);
    TextureImporter importer = assetImporter as TextureImporter;
    //将导入的贴图设置为Sprite(2D and UI)类型的
    importer.textureType = TextureImporterType.Sprite;
    //不开启该贴图的Mipmap
    importer.mipmapEnabled = false;
    }

    贴图被设置为:

    image

  • assetPath​:导入资源的路径(string​类型)

    该属性常用于导入资源时执行了回调函数后获取到导入资源的路径

    1
    2
    3
    4
    private void OnPreprocessTexture()
    {
    Debug.Log("纹理设置回调" + assetPath);
    }

    当导入一个贴图资源时,会自动执行该方法:

    image

继承AssetPostprocessor后的常用回调方法

  • 纹理相关

    • void OnPreprocessTexture()​ 导入纹理资源之前调用,允许修改纹理的导入设置

      1
      2
      3
      4
      5
      6
      7
      8
      9
      private void OnPreprocessTexture()
      {
      Debug.Log("纹理设置回调" + assetPath);
      TextureImporter importer = assetImporter as TextureImporter;
      //将导入的贴图设置为Sprite(2D and UI)类型的
      importer.textureType = TextureImporterType.Sprite;
      //不开启该贴图的Mipmap
      importer.mipmapEnabled = false;
      }

      当导入一个贴图资源时,会自动执行该方法:

      image

      同时,贴图也被设置:

      image

      在贴图的Inspector窗口内,可以看到回调函数

      image

    • void OnPostprocessTexture(Texture2D texture)​ 导入纹理资源之后调用,允许你对导入后为其进行后处理
      比如 修改纹理格式、尺寸、压缩等等

      1
      2
      3
      4
      5
      6
      private void OnPostprocessTexture(Texture2D texture)
      {
      Debug.Log("纹理后处理回调" + texture.name);
      //对纹理进行压缩
      EditorUtility.CompressTexture(texture, TextureFormat.ETC_RGB4, TextureCompressionQuality.Fast);
      }

      执行结果:image

      在贴图的Inspector窗口内,可以看到回调函数

      image

  • 模型相关

    • void OnPreprocessModel()​ 导入模型资源之前调用,允许修改模型的导入设置

      使用方法参考OnPreprocessTexture()​,可在该函数内使用ModelImporter​

      1
      private void OnPreprocessModel() { }
    • void OnPostprocessModel(GameObject obj)​ 导入模型资源之后调用,允许你对导入后为其进行后处理,
      比如 修改网格、材质、动画等,使用方法参考OnPostprocessTexture()​

      1
      private void OnPostprocessModel(GameObject gameObject) { }
  • 音频相关

    • void OnPreprocessAudio()​ 导入音频资源之前调用,允许修改音频的导入设置

      使用方法参考OnPreprocessTexture()​,可在该函数内使用AudioImporter​

      1
      private void OnPreprocessAudio() { }
    • void OnPostprocessAudio(AudioClip clip)​ 导入音频资源之后调用,允许你对导入后为其进行后处理,
      比如 修改音频格式、质量等,使用方法参考OnPostprocessTexture()​

      1
      private void OnPostprocessAudio(AudioClip clip) { }

等等,每一种资源类型都有对应的回调函数,具体可见:AssetPostprocessor - Unity 脚本 API

AssetImporter (资源导入器类)

AssetImporter​ 是 特定资源类型的资源导入程序的基类,它提供了一些方法和属性,用于配置和管理资源的导入设置
一般我们不会直接使用该类,而是通过使用继承它的子类来设置导入资源的相关信息
当我们导入一个资源时,在Inspector窗口中进行的相关设置,都是通过继承该类的子类实现的

它的子类一般按照资源类型来划分:

  • TextureImporter​:用于导入纹理资源,并配置纹理的压缩格式、尺寸、平铺方式等设置

    在纹理被导入时,我们可以在继承AssetPostprocessor​的类中的OnPreprocessTexture()​内
    通过 as​ 成 TextureImporter​ 的 assetImporter​ 属性来批量设置纹理,就像在Inspector窗口上设置导入纹理(详见:U3L2——图片导入概述)那样

    我们可以通过该属性来修改导入的资源的设置,效果就相当于在Inspector窗口上设置资源一样
    假设我们要修改导入的贴图为Sprite,并关闭Mipmap

    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void OnPreprocessTexture()
    {
    Debug.Log("纹理设置回调" + assetPath);
    TextureImporter importer = assetImporter as TextureImporter;
    //将导入的贴图设置为Sprite(2D and UI)类型的
    importer.textureType = TextureImporterType.Sprite;
    //不开启该贴图的Mipmap
    importer.mipmapEnabled = false;
    }

    贴图被设置为:

    image

    API说明:

  • ModelImporter​:用于导入模型资源,并配置模型的导入设置,如网格、材质、动画等

    在模型被导入时,我们可以在继承AssetPostprocessor​的类中的OnPreprocessTexture()​内
    通过as​成ModelImporter​的assetImporter​属性来批量设置模型,就像在Inspector窗口上设置导入模型那样
    使用方法参考:TextureImporter​

    API说明:

  • AudioImporter​:用于导入音频资源,并配置音频的导入设置,如压缩格式、音频质量等

    在音频被导入时,我们可以在继承AssetPostprocessor​的类中的OnPreprocessTexture()​内
    通过as​成AudioImporter​的assetImporter​属性来批量设置音频,就像在Inspector窗口上设置导入音频那样
    使用方法参考:TextureImporter​

    API说明:

  • VideoClipImporter​:用于导入视频资源,并配置视频的导入设置,如视频质量、循环模式等

    在视频被导入时,我们可以在继承AssetPostprocessor​的类中的OnPreprocessTexture()​内
    通过as​成VideoClipImporter​的assetImporter​属性来批量设置视频,就像在Inspector窗口上设置导入视频那样
    使用方法参考:TextureImporter​

    API说明:

  • ScriptedImporter​:用于创建自定义的资源导入器,可以通过编写脚本来实现对特定类型资源的导入设置和处理逻辑
    如果想要对某些特定格式的资源进行自定义配置处理,可以通过继承该类的方式去实现

    API说明: