注意
:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。
文章目录
- 前言
- 一、AssetPostprocessor
- 1、主要特点
- 2、常用回调方法
- 3、常用属性
- 4、示例
- 二、AssetImporter
- 1、主要特点
- 2、特定类型导入器
- 3、简单使用
- 三、AssetPostprocessor和AssetImporter配合使用示例
- 专栏推荐
- 完结
前言
AssetPostprocessor和AssetImporter主要是用于处理资源导入批量设置(对导入的资源进行统一设置)和资源导入后处理(对导入的资源进行统一的预处理)。
一、AssetPostprocessor
AssetPostprocessor 是一个允许在资源导入过程中进行自定义处理的基类,可以通过继承它来创建自定义的资源后处理器。
官方文档:AssetPostprocessor
1、主要特点
- 允许在资源导入前后执行自定义代码
- 可以修改导入设置或导入的资源数据
- 支持多种资源类型的处理
2、常用回调方法
-
OnPreprocessTexture()
: 在纹理导入前调用 -
OnPostprocessTexture()
: 在纹理导入后调用 -
OnPreprocessModel()
: 在模型导入前调用 -
OnPostprocessModel()
: 在模型导入后调用 -
OnPreprocessAudio()
: 在音频导入前调用 -
OnPostprocessAudio()
: 在音频导入后调用 -
OnAssignMaterialModel()
: 在模型材质分配时调用
3、常用属性
AssetImporter assetImporter
:对应类型的资源导入器对象
string assetPath
:导入资源的路径
4、示例
using UnityEditor;
using UnityEngine;public class MyAssetPostprocessor : AssetPostprocessor
{// 在纹理导入前调用void OnPreprocessTexture(){// 对应类型的资源导入器对象Debug.Log("对应类型的资源导入器对象:" + assetImporter);// 输出当前正在处理的导入资源的路径Debug.Log("导入纹理的路径:" + assetPath); }// 在纹理导入后调用void OnPostprocessTexture(Texture2D texture){// 输出处理后的纹理名称Debug.Log("处理后的纹理名称:" + texture.name); // 使用EditorUtility.CompressTexture方法压缩纹理到ETC_RGB4格式,并且压缩质量设为FastEditorUtility.CompressTexture(texture, TextureFormat.ETC_RGB4, TextureCompressionQuality.Fast);}
}
效果,我们随便导入一张图片进unity,就可以看到打印
二、AssetImporter
AssetImporter 是 Unity 中用于处理资源导入的基类,它为不同类型的资源提供了通用的导入设置接口。一般我们不会直接使用该类,而是通过使用继承它的子类来设置导入资源的相关信息。当我们导入一个资源时,在Inspector窗口中进行的相关设置都是通过继承该类的子类实现的。
官方文档:AssetImporter
1、主要特点
- 是所有特定类型导入器(如 TextureImporter、ModelImporter 等)的基类
- 提供了资源导入的通用属性和方法
- 可以通过脚本访问和修改导入设置
2、特定类型导入器
TextureImporter
:用于导入纹理资源,并配置纹理的压缩格式、尺寸、平铺方式等设置。ModelImporter
:用于导入模型资源,并配置模型的导入设置,如网格、材质、动画等。AudioImporter
:用于导入音频资源,并配置音频的导入设置,如压缩格式、音频质量等。VideoClipImporter
:用于导入视频资源,并配置视频的导入设置,如视频质量、循环模式等。ScriptedImporter
:用于创建自定义的资源导入器,可以通过编写脚本来实现对特定类型资源的导入设置和处理逻辑。如果想要对某些特定格式的资源进行自定义配置处理,可以通过继承该类的方式去实现。
3、简单使用
// 在纹理导入前调用
void OnPreprocessTexture()
{// 获取当前正在处理的资源的导入器并转换为TextureImporter类型TextureImporter importer = (TextureImporter)assetImporter;
}// 在模型导入前调用
void OnPreprocessModel()
{// 获取当前正在处理的资源的导入器并转换为ModelImporter类型ModelImporter improter = (ModelImporter)assetImporter;
}// 在音频导入前调用
void OnPreprocessAudio()
{// 获取当前正在处理的资源的导入器并转换为AudioImporter类型AudioImporter improter = (AudioImporter)assetImporter;
}
三、AssetPostprocessor和AssetImporter配合使用示例
using UnityEditor;
using UnityEngine;public class MyAssetPostprocessor : AssetPostprocessor
{// 在纹理导入前调用void OnPreprocessTexture(){// 只处理特定文件夹下的纹理if (!assetPath.Contains("Assets/Textures/")) return;// 获取当前正在处理的资源的导入器并转换为TextureImporter类型TextureImporter importer = (TextureImporter)assetImporter;// 设置通用导入参数importer.textureType = TextureImporterType.Sprite;// 设置导入的纹理类型为Spriteimporter.mipmapEnabled = false;// 禁用mipmapimporter.spritePixelsPerUnit = 50; // 设置每单位像素// 根据文件夹设置不同的压缩格式if (assetPath.Contains("UI")){importer.textureCompression = TextureImporterCompression.Uncompressed;importer.maxTextureSize = 512;}else if (assetPath.Contains("Background")){importer.textureCompression = TextureImporterCompression.Compressed;importer.maxTextureSize = 1024;}}// 在纹理导入后调用void OnPostprocessTexture(Texture2D texture){if (!assetPath.Contains("Assets/Textures/")) return;Debug.Log($"已处理纹理: {texture.name} (尺寸: {texture.width}x{texture.height})");}
}
效果,我们随便导入一张图片进unity,可以看到导入的图片参数默认值变成了我们代码设置的样式
专栏推荐
地址 |
---|
【unity游戏开发入门到精通——C#篇】 |
【unity游戏开发入门到精通——unity通用篇】 |
【unity游戏开发入门到精通——unity3D篇】 |
【unity游戏开发入门到精通——unity2D篇】 |
【unity实战】 |
【制作100个Unity游戏】 |
【推荐100个unity插件】 |
【实现100个unity特效】 |
【unity框架/工具集开发】 |
【unity游戏开发——模型篇】 |
【unity游戏开发——InputSystem】 |
【unity游戏开发——Animator动画】 |
【unity游戏开发——UGUI】 |
【unity游戏开发——联网篇】 |
【unity游戏开发——优化篇】 |
【unity游戏开发——shader篇】 |
【unity游戏开发——编辑器扩展】 |
完结
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!