【unity游戏开发——编辑器扩展】AssetPostprocessor和AssetImporter对导入的资源进行统一的预处理

article/2025/7/30 5:18:39

注意:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【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,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述


http://www.hkcw.cn/article/NmsmXiSUVJ.shtml

相关文章

代码随想录算法训练营 Day61 图论ⅩⅠ Floyd A※ 最短路径算法

图论 题目 97. 小明逛公园 本题是经典的多源最短路问题。 在这之前我们讲解过,dijkstra朴素版、dijkstra堆优化、Bellman算法、Bellman队列优化(SPFA) 都是单源最短路,即只能有一个起点。 而本题是多源最短路,即求多…

CATIA高效工作指南——测量分析篇(一)

一、精准重心分析与实时更新技术 1.1 材料属性与几何体重心关联 在复杂零件设计中,重心控制直接影响产品性能。通过CATIA的材料属性系统可实现动态重心跟踪: ​​密度赋值​​:应用材料 → 选择单个几何体 /依次选择多个几何体→ 指定材质…

【PCB工艺】PCB设计中的基本概念

此文结合实例讲解PCB的设计流程和一些基本概念。 🧱 PCB 是什么? PCB(Printed Circuit Board)(即印制线路板) 是电子元器件的载体,是没有焊接任何器件的“裸板”。 PCB只是板子,没有焊接元件,而PCBA可以理解为焊接好元件的完成板子。 简单点说,PCB 只包含:铜线、电源…

深度学习|pytorch基本运算

【1】引言 pytorch是深度学习常用的包,顾名思义,就是python适用的torch包,在python里面使用时直接import torch就可以调用。 需要注意的是,pytorch包与电脑配置、python版本有很大关系,一定要仔细阅读安装要求、找到…

[Windows] 千库/六图素材下载工具

下载链接 夸克网盘分享(点击蓝色自己自行保存下载) 由吾爱大神分享一块下载工具 核心功能:无水印下载,圈网站素材覆盖,下载速度飞起,还能同时下载100个素材 使用方法: 双击运行 千库六图下…

SolidWorks 文件打开时电脑卡顿问题分析与解决

最近遇到一个问题就是我点击solid work的文件的时候会将电脑卡住然后电脑开始飞速的加载内存,鼠标移动很卡顿 解决办法: 1.找到资源管理器 当遇到这种情况时,可以尝试通过资源管理器来解决问题。首先,找到任务管理器&#xff08…

CppCon 2014 学习:Hourglass Interfaces for C++ APIs

共享库(Shared Libraries) 的基本结构和机制。 什么是 Shared Library? 共享库是在多个程序之间共享的一组可执行代码和数据,可以在运行时动态加载。 在 Windows 中通常是 .dll在 Linux 中是 .so(Shared Object&…

<3>, 常用控件

目录 一、控件概述 二、QWidget 核心属性 1, 核心属性列表 2,enabled 3,geometry 4,windowTitle 5,windowIcon 6,windowOpacity 7,font 8,toolTip 9,focusPol…

基于微服务架构的社交学习平台WEB系统的设计与实现

设计(论文)题目 基于微服务架构的社交学习平台WEB系统的设计与实现 摘 要 社交学习平台 web 系统要为学习者打造一个开放、互动且社交性强的在线教育环境,打算采用微服务架构来设计并实现一个社交学习平台 web 系统,以此适应学…

uboot启动流程分析之uboot启动阶段

uboot启动可分为汇编语言执行和C语言执行两个阶段,两个阶段以_main函数为分界。 uboot第一阶段由_start (arch/arm/lib/vectors.S)进入,然后跳转到reset(arch/arm/cpu/armv7/start.S)函数, reset函数进行设置CPU运行模式,关闭中断等一系列CP…

QT学习教程(十一)

​​​​​​实现文件菜单(Implementing the File Menu) 我们实现与文件菜单有关的槽函数和相关的私有函数,以使文件菜单可以工作,同时管理最近打开文件列表。 void MainWindow::newFile(){if (okToContinue()) { spreadsheet-…

【MATLAB代码】制导方法——平行接近法引导,二维环境,动态目标|附代码的下载链接

平行接近法是一种导引方法,其目标是保持目标瞄准线在空间中的平行移动。 本文所述的代码实现了二维平行接近法导引的动态仿真,模拟导弹追踪移动目标的过程。通过实时调整导弹速度方向,确保其逐渐逼近目标,最终在设定距离内完成拦截…

解决win自动重启(自用,留链接)

2025-05-30修改,如果再出现重启回来修改。没动静就是没事了 1、依据系统事件查看器确认错误代码 事件查看器步骤 (上图没啥用) 下图错误代码,如果原因一致 2、禁用“用户体验改善计划”点击此处步骤

AI入门示例

市面上有很多AI大模型,这里以 智谱的大模型 为示例 1.先要注册智谱AI开放平台 2.注册成功后,会赠送3个月的免费额度,如下 3.然后去控制台,创建一个API KEY 4.接着就可以开始写代码了 提前导入包: openai 示例1&…

仿真每日一练 | 静力学分析与动力学分析的区别

很多有限元初学者都在纠结一个问题,就是静力学分析和动力学分析有什么区别,今天以一个时变载荷的例子,带大家领悟其中奥妙。 首先来了解一下二者的物理方程: 静力学所解决的问题:KxF 动力学所解决的问题&#xff1…

Python数据处理中的查找和排序使用详解

概要 在编程中,查找和排序是两个常见且重要的操作,几乎所有数据处理任务都会涉及到这两个内容。Python 作为一门功能强大的编程语言,为我们提供了多种查找和排序的方式,不仅包括内置函数,还支持通过算法来自定义操作。本文将详细介绍 Python 中常用的查找与排序方法,包括…

面试-【搜索引擎】

elasticsearch分布式架构原理 index -> type -> mapping -> document -> field elasticsearch 7.x取消了type mapping类似于schema信息 document代表一行数据 field代表一个字段值 elasticsearch读写流程底层剖析 (1)es写数据过程 1)客户端选择一个 node 发送…

引领机器人交互未来!MANUS数据手套解锁精准手部追踪

MANUS数据手套为机器人技术带来高精度手部追踪,助力实现人与机器的自然交互!近年,越来越多客户希望利用这项技术精准操控机械臂、灵巧手和人形机器人,不断提升设备的智能化水平和交互体验。 MANUS数据手套是高精度人机交互设备&am…

国标GB28181设备管理软件EasyGBS实现生产全流程可视化监控与精细化管理

一、引言​ 在全球经济一体化与工业化浪潮的推动下,市场竞争愈发激烈,企业想要在行业中占据优势,实现生产流程的高效管理与精准把控成为关键。生产流程不仅是产品质量的生命线,更是提升生产效率、保障经济效益的核心环节。国标GB…

数据治理系统是什么?数据治理工具有什么用?

目录 一、数据治理系统是什么? 二、数据治理系统的重要性 1. 保障数据质量 2. 确保数据安全 3. 促进数据共享与协作 三、常见的数据治理工具及其特点 1. 数据质量管理工具 2. 数据集成工具 3. 元数据管理工具 四、数据治理工具有哪些作用? 1.…