Unity References
为什么 Unity 引用会断:GUID、Meta 文件和 Missing Scripts
Unity 引用依赖 GUID、fileID 和脚本/资源身份。重构、替换资源或错误合并 `.meta` 文件后,引用可能看起来还在 YAML 中,但 Unity 已经无法解析它。
Unity 如何识别被引用对象
资源文件由 `.meta` 中的 GUID 标识;同一文件内的对象由 fileID 标识。MonoBehaviour 还会引用脚本资源,因此脚本 GUID 变化会导致 missing script。
重构或替换后引用如何断裂
常见原因是删除并重新导入资源导致 GUID 变化、合并时覆盖 `.meta`、移动脚本时没有保留 meta、或 Prefab/Scene 仍引用旧对象身份。
Git merge 后的 missing scripts 和 missing prefabs
合并可能保留了对旧 GUID/fileID 的引用,但对应资源已不存在或脚本 GUID 已变。Unity 会显示 missing script、missing prefab 或丢失引用。
更安全的诊断方式
审查时应显示 GUID 对应的资源、fileID 对应的对象、引用来源和目标,以及变更来自哪个分支。这样才能判断是合法重构还是损坏引用。
FAQ
为什么 Git merge 后 Unity 引用会断?
因为 GUID、fileID 或 `.meta` 身份在分支之间被删除、重建或错误合并。
为什么 Unity 会出现 missing scripts?
通常是 MonoBehaviour 引用的脚本 GUID 不再对应有效脚本资源。
普通 diff 为什么难发现?
因为它只显示 GUID/fileID 字符串,不显示它们解析到哪个 Unity 对象。
总结
Unity 引用依赖 GUID、fileID 和脚本/资源身份。重构、替换资源或错误合并 `.meta` 文件后,引用可能看起来还在 YAML 中,但 Unity 已经无法解析它。
Summary
身份如何存储
资源用 GUID,对象用 fileID。
断裂如何发生
meta 丢失、资源重建、脚本移动或错误合并。
审查需要
把 GUID/fileID 解析成可理解的资源和对象。
Next step
在真实 Unity 资源上审查这些变更
如果你的团队正在处理 Unity scene、prefab、material 或 YAML asset 的合并风险,可以查看 MergeSight 如何把 raw YAML 转成可审查的 Unity 上下文。