【Unity拓展】ScriptedImporter

🔍 ​​一、ScriptedImporter 的含义与核心机制​​

ScriptedImporter 是 Unity 用于​​扩展资源导入管线​​的 API,允许开发者自定义非原生文件格式的导入逻辑。其核心特点包括:

​​1.自定义格式支持​​

通过 [ScriptedImporter] 属性注册对特定文件扩展名(如 .tmx, .vox, .psb)的处理能力。
​​示例​​:SuperTiled2Unity 插件监听 .tmx 文件,将其转换为 Unity 的 TileMap 资源。

2.​​自动化导入流程​​

当文件拖入 Assets 目录时自动触发 OnImportAsset() 方法,无需手动操作。

3.​​版本控制与依赖管理​​

通过 version 参数控制资源重新导入(如脚本更新时强制刷新资源)。
使用 importQueueOffset 调整导入顺序,解决资源依赖问题(如先导入材质再生成预制件)。

🎯 ​​二、适用场景​​

1. ​​游戏开发中的专用格式转换​​

​​2D 分层资源处理​​
如 Photoshop 的 .psb 文件 → 自动生成分层预制件(保留图层结构、深度排序),适用于角色/场景组装。
典型工具:2D PSD Importer(Unity 官方包)。

​​地图编辑器集成​​

如 Tiled 编辑器的 .tmx 文件 → Unity 原生 TileMap,支持自动碰撞体生成。

​​体素模型动画​​

如 .vox 文件 → 带蒙皮动画的网格,支持 Mecanim 人形动画系统。

2. ​​资源规范检查与批量处理​​

​​自动化规范校验​​
在导入时检查纹理尺寸、命名规则(如 _N 后缀非法线贴图则报错)。

​​动态资源优化​​
根据平台自动调整纹理分辨率(如移动端降至 256px)。

3. ​​原生格式的覆盖与增强​​

​​替换默认导入器​​
如声明支持 .fbx 并指定 overrideExts 参数,可替代 Unity 的 ModelImporter。

​​扩展功能​​
在导入 .glb 模型时自动添加 LOD 组或碰撞体。

🛠️ ​​三、用法示例与关键代码​​

示例 1:基础模型导入器(.cube → 预制件)​

using UnityEditor.AssetImporters; using UnityEngine; [ScriptedImporter(1, "cube")] // 版本号=1,扩展名="cube" public class CubeImporter : ScriptedImporter { public Material defaultMaterial; // 可配置的默认材质 public override void OnImportAsset(AssetImportContext ctx) { // 1. 创建立方体对象 var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); // 2. 应用材质 cube.GetComponent<MeshRenderer>().sharedMaterial = defaultMaterial; // 3. 注册为主资源 ctx.AddObjectToAsset("Cube", cube); ctx.SetMainObject(cube); } }

关键点说明​​:

ctx.AddObjectToAsset() 注册子资源(如网格、材质);
ctx.SetMainObject() 设置场景中显示的根对象。

示例 2:优先级控制与格式覆盖(.fbb → 替换 .fbx)​

[ScriptedImporter(2, new[] { "fbb" }, new[] { "fbx" }, 100)] // 优先级=100,覆盖 .fbx 的默认导入 public class CustomModelImporter : ScriptedImporter { public override void OnImportAsset(AssetImportContext ctx) { // 解析 .fbb 并生成优化版模型 var model = ParseCustomFormat(ctx.assetPath); ctx.AddObjectToAsset("Model", model); } }

参数解析​​:

new[] { “fbb” }:监听 .fbb 文件;
new[] { “fbx” }:覆盖 Unity 对 .fbx 的默认处理;
100:高优先级确保优先执行。

⚠️ ​​四、注意事项与最佳实践​​

1.​​冲突解决​​

多插件同时注册同一扩展名会导致导入失败(报错 Multiple scripted importers…)。
​​方案​​:在 Project Settings > Scripted Importers 中禁用冗余导入器,或通过 importQueueOffset 设置优先级。

2.​​性能优化​​

Unity 2020.2+ 优化了导入器注册逻辑(速度提升 12~800 倍),推荐升级。

3.​​安全边界​​

不可覆盖 Unity 原生支持的格式(如 .png),除非显式声明 overrideExts。

4.​​版本控制​​

修改 version 值会触发资源重新导入,需谨慎更新。

在这里插入图片描述

📖 ​​五、总结​​

ScriptedImporter 是 Unity 资源管线的扩展基石,适用于:

1.​​非原生格式转换​​(如游戏编辑器专属格式);
2.​​自动化资源处理​​(规范检查、平台优化);
​​3.原生格式增强​​(覆盖导入逻辑)。

通过合理设计导入逻辑、管理插件冲突及利用优先级机制,可显著提升美术与程序协作效率,减少手动操作错误。建议结合官方包(如 2D PSD Importer)实践,再逐步扩展自定义需求。

本文是转载文章,点击查看原文
如有侵权,请联系 lx@jishuguiji.net 删除。