Unity 报错 Duplicate identifier 2100000:一次“材质 .mat 合并残留”定位与最小修复
Unity 报错 Duplicate identifier 2100000:一次“材质 .mat 合并残留”定位与最小修复
适用场景:Unity 导入/刷新资源时,Console 报
Duplicate identifier xxxx,并指出某个.mat/.prefab/.asset等 YAML 文本资源“存在多个相同 identifiers”,导致文件加载失败。
现象:Unity 无法加载材质文件
我遇到的报错核心信息如下(关键两行足够定位方向):
Duplicate identifier 2100000. File: "Assets/Temp/Materials/Level01_LayoutRef.mat".Error loading the file ... File has multiple objects with same identifiers. Probably caused by a merge.
影响是:该 .mat 在导入阶段就被 Unity 拒绝解析,Console 持续报错,后续可能引发材质引用丢失(取决于场景/预制体是否引用它)。
根因:同一个 .mat 文件里出现了“重复的 YAML 文档块”
Unity 的很多资源在启用文本序列化时,本质是 YAML 文本。正常情况下,一个 .mat 文件里应该只有一个 Material 对象块,例如:
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
...
这次问题的根因是:同一个 Assets/Temp/Materials/Level01_LayoutRef.mat 文件里出现了 两段 YAML 文档块,而且两段都写了同样的对象锚点:
--- !u!21 &2100000
于是 Unity 发现“同文件内出现多个对象但 identifiers(这里是 2100000)重复”,直接拒绝加载。
这种情况很像:合并冲突残留/手工拼接 导致同一份资源被重复粘贴进文件里。
最小修复:删除第二段重复文档(从第二个 %YAML 1.1 开始)
修复思路很简单:让文件里只剩 一个 Material 对象定义。
步骤
- 用文本编辑器打开:
Assets/Temp/Materials/Level01_LayoutRef.mat - 搜索
%YAML 1.1 - 如果你能找到 第二个
%YAML 1.1,那么从它开始到文件末尾,通常就是重复粘贴出来的第二段文档 - 删除这段重复内容,保存文件
为什么说这是“最小修复”
- 不改 GUID、不改 fileID、不改材质属性结构,只是移除重复的第二份对象定义
- 风险最低,且与 Unity 报错描述(Probably caused by a merge)一致
如何验证修复成功
回到 Unity 后,验证路径如下:
- 等待资源重新导入完成,确认 Console 不再出现:
Duplicate identifier 2100000multiple objects with same identifiers
如果你改完文件但 Console 仍显示旧报错,通常是导入队列/缓存未刷新,可以尝试:
- 在 Project 视图中对
Assets执行Reimport All - 或直接重启 Unity
下次怎么避免(防止同类问题再发生)
- 不要手工拼接
.mat/.prefab/.asset等 Unity YAML 文本资源 - 如果使用版本控制,发生冲突时建议:
- 优先用 Unity 推荐的 YAML 合并工具(
UnityYAMLMerge/ Smart Merge) - 并尽量保持 Unity 资源为文本序列化,便于审查差异与合并
- 优先用 Unity 推荐的 YAML 合并工具(
附:本次修复涉及文件
Assets/Temp/Materials/Level01_LayoutRef.mat
本文来自博客园,作者:星空探险家,转载请注明原文链接:https://www.cnblogs.com/PuppetLazy/p/19521127

浙公网安备 33010602011771号