UEDL16——AssetImporter 和 AssetPostprocessor
UEDL16——AssetImporter 和 AssetPostprocessor
本章代码关键字
1 | AssetPostprocessor //主要用于处理资源导入时的通用逻辑,我们可以通过继承该类,并实现其中的一些回调方法来自定义处理资源 |
AssetImporter 和 AssetPostprocessor 资源导入设置拓展
AssetImporter
和 AssetPostprocessor
是需要配合进行使用的,它们主要是用于处理
-
资源导入批量设置(对导入的资源进行统一设置)
例如将导入的贴图文件纹理类型(Texture Type)统一修改为Sprite(2D and UI)
-
资源导入后处理(对导入的资源进行统一的预处理)
操作资源文件本身的数据,例如统一将贴图一分为二,修改纹理格式、尺寸、压缩等等
AssetPostprocessor(资源后处理器类)
它主要用于处理资源导入时的通用逻辑,我们可以通过继承该类,并实现其中的一些回调方法来自定义处理资源
我们一般会进行以下处理:
- 进行某种类型资源的通用设置
- 对某种类型资源进行统一批量的处理
注意:如果只想对某种资源中的某些内容进行处理,可以自己加命名规则
AssetPostprocessor
的更多内容:
- AssetPostprocessor - Unity 脚本 API(中文文档,缺失部分翻译)
- Unity - Scripting API: AssetPostprocessor (unity3d.com)(英文文档)
继承AssetPostprocessor后的常用属性
-
assetImporter
:对应类型的资源导入器对象(AssetImporter类型)我们可以通过该属性来设置导入的资源,效果就相当于在Inspector窗口上设置资源一样
假设我们要修改导入的贴图为Sprite,并关闭Mipmap1
2
3
4
5
6
7
8
9private void OnPreprocessTexture()
{
Debug.Log("纹理设置回调" + assetPath);
TextureImporter importer = assetImporter as TextureImporter;
//将导入的贴图设置为Sprite(2D and UI)类型的
importer.textureType = TextureImporterType.Sprite;
//不开启该贴图的Mipmap
importer.mipmapEnabled = false;
}贴图被设置为:
-
assetPath
:导入资源的路径(string
类型)该属性常用于导入资源时执行了回调函数后获取到导入资源的路径
1
2
3
4private void OnPreprocessTexture()
{
Debug.Log("纹理设置回调" + assetPath);
}当导入一个贴图资源时,会自动执行该方法:
继承AssetPostprocessor后的常用回调方法
-
纹理相关
-
void OnPreprocessTexture()
导入纹理资源之前调用,允许修改纹理的导入设置1
2
3
4
5
6
7
8
9private void OnPreprocessTexture()
{
Debug.Log("纹理设置回调" + assetPath);
TextureImporter importer = assetImporter as TextureImporter;
//将导入的贴图设置为Sprite(2D and UI)类型的
importer.textureType = TextureImporterType.Sprite;
//不开启该贴图的Mipmap
importer.mipmapEnabled = false;
}当导入一个贴图资源时,会自动执行该方法:
同时,贴图也被设置:
在贴图的Inspector窗口内,可以看到回调函数
-
void OnPostprocessTexture(Texture2D texture)
导入纹理资源之后调用,允许你对导入后为其进行后处理
比如 修改纹理格式、尺寸、压缩等等1
2
3
4
5
6private void OnPostprocessTexture(Texture2D texture)
{
Debug.Log("纹理后处理回调" + texture.name);
//对纹理进行压缩
EditorUtility.CompressTexture(texture, TextureFormat.ETC_RGB4, TextureCompressionQuality.Fast);
}执行结果:
在贴图的Inspector窗口内,可以看到回调函数
-
-
模型相关
-
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,并关闭Mipmap1
2
3
4
5
6
7
8
9private void OnPreprocessTexture()
{
Debug.Log("纹理设置回调" + assetPath);
TextureImporter importer = assetImporter as TextureImporter;
//将导入的贴图设置为Sprite(2D and UI)类型的
importer.textureType = TextureImporterType.Sprite;
//不开启该贴图的Mipmap
importer.mipmapEnabled = false;
}贴图被设置为:
API说明:
-
ModelImporter
:用于导入模型资源,并配置模型的导入设置,如网格、材质、动画等在模型被导入时,我们可以在继承
AssetPostprocessor
的类中的OnPreprocessTexture()
内
通过as
成ModelImporter
的assetImporter
属性来批量设置模型,就像在Inspector窗口上设置导入模型那样
使用方法参考:TextureImporterAPI说明:
-
AudioImporter
:用于导入音频资源,并配置音频的导入设置,如压缩格式、音频质量等在音频被导入时,我们可以在继承
AssetPostprocessor
的类中的OnPreprocessTexture()
内
通过as
成AudioImporter
的assetImporter
属性来批量设置音频,就像在Inspector窗口上设置导入音频那样
使用方法参考:TextureImporterAPI说明:
-
VideoClipImporter
:用于导入视频资源,并配置视频的导入设置,如视频质量、循环模式等在视频被导入时,我们可以在继承
AssetPostprocessor
的类中的OnPreprocessTexture()
内
通过as
成VideoClipImporter
的assetImporter
属性来批量设置视频,就像在Inspector窗口上设置导入视频那样
使用方法参考:TextureImporterAPI说明:
-
ScriptedImporter
:用于创建自定义的资源导入器,可以通过编写脚本来实现对特定类型资源的导入设置和处理逻辑
如果想要对某些特定格式的资源进行自定义配置处理,可以通过继承该类的方式去实现API说明: