Unity 2019中ScriptedImporter处理FBX导入事件报错求助
问题解决:Unity FBX导入触发事件报错处理
报错原因
- 重复注册冲突:项目中存在多个
EmptinessImporter实例(比如脚本重复、多文件夹重复引用),导致Unity检测到同一扩展名被同一Importer多次注册。 - 原生格式覆盖限制:Unity 2019.4中,
ScriptedImporter仅支持处理自定义格式,无法覆盖Unity原生支持的格式(如FBX、PNG),强行绑定会触发冲突报错。
正确解决方案
使用Unity官方推荐的AssetPostprocessor来监听FBX导入事件,而非自定义ScriptedImporter。以下是完整代码:
using UnityEditor; using UnityEngine; // 必须放在Assets/Editor文件夹下,仅在Editor环境生效 public class FBXImportProcessor : AssetPostprocessor { // FBX导入前触发,可修改导入设置 void OnPreprocessModel() { // 仅过滤FBX文件 if (assetImporter is ModelImporter && assetPath.EndsWith(".fbx", System.StringComparison.OrdinalIgnoreCase)) { Debug.Log($"预处理FBX文件: {assetPath}"); // 示例:修改ModelImporter的导入设置 ModelImporter importer = (ModelImporter)assetImporter; // importer.importMaterials = false; // 关闭材质导入 } } // FBX导入完成后触发,可修改生成的GameObject void OnPostprocessModel(GameObject importedObject) { if (assetImporter is ModelImporter && assetPath.EndsWith(".fbx", System.StringComparison.OrdinalIgnoreCase)) { Debug.Log($"FBX导入完成: {assetPath},生成对象: {importedObject.name}"); // 示例:给导入的对象添加自定义组件 // importedObject.AddComponent<YourCustomComponent>(); } } }
注意事项
- 删除原有的
EmptinessImporter和EmptinessImporterEditor脚本,避免残留冲突。 - 若仍有重复注册类的报错,检查项目中是否存在重复的脚本文件或重复引用。
内容的提问来源于stack exchange,提问作者Isaac
相关产品推荐
相关产品推荐

