🔍 一、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)实践,再逐步扩展自定义需求。