如何使用 Unity Smart Merge 合并我的 Unity 场景?

How can I merge my Unity Scene using Unity Smart Merge?

我正在尝试使用 Smart Merge 合并我和我的合作伙伴一直在处理的 Unity 场景。我的其他资产和预制件很好地解决了与 Smart Merge 的冲突;然而,一个场景根本没有合并。

在我的 .git/config 文件中添加了

[merge]
tool = unityyamlmerge
[mergetool "unityyamlmerge"]
trustExitCode = false
cmd = 'C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"

我还包含了一个 .gitattributes 文件,其中包含

*.unity binary
*.prefab binary
*.asset binary

我已将资产序列化设置为 'Force Text' 并将版本控制设置为 'Visible Meta Files.'

我们的预制件和其他资产合并得很好,但我们的一个场景根本没有合并。

当运行终端中的git mergetool命令时,它显示了这个指定场景的冲突,但是returns最后是这样的:

Left  563852304.Light.m_Color.r add as 0.8962264
Right 563852304.Light.m_Color.r add as 0.9433962
Left  610301896.GameObject.m_IsActive add as 0
Right 610301896.GameObject.m_IsActive add as 1
Left  610301898.Transform.m_LocalPosition.x add as -13.07
Right 610301898.Transform.m_LocalPosition.x add as -14.31
Left  610301898.Transform.m_LocalPosition.y add as 2.6
Right 610301898.Transform.m_LocalPosition.y add as 2.14
Left  610301898.Transform.m_RootOrder add as 8
Right 610301898.Transform.m_RootOrder add as 7
Left  869912137.Transform.m_LocalPosition.x add as -7.36
Right 869912137.Transform.m_LocalPosition.x add as -7.333
Left  869912137.Transform.m_LocalScale.x add as 4
Right 869912137.Transform.m_LocalScale.x add as 4.0070143
Conflict handling:
Xmas-Prototype-01/Assets/_Scenes/InitScene.unity seems unchanged.
Was the merge successful [y/n]?

还有更多冲突,但无法一一列举。

这是唯一没有与我的本地分支合并的文件。有没有办法让这个场景合并?

谢谢!

我知道这不是一个很好的答案。 在处理场景和 git 时,典型的最佳做法是一次只让一个人处理一个场景。我们一直在使用 "scene hat".

我们(独立工作室)一直在做的是 additively load multiple scenes,所以关卡设计师有一个场景没有功能可以处理,而程序员(他们不需要很多time with a scene) 有一个 "bootstrap" 场景,其中包含游戏功能。

我相信你应该通过在你的 .gitattributes

*.unity merge=unityyamlmerge eol=lf
*.prefab merge=unityyamlmerge eol=lf

关于 YAML 让我烦恼的一件事是它似乎没有意义通过场景中的编辑添加文本的位置。如果将游戏对象添加到场景列表的最底部,它会出现在 YAML 源中的随机位置。如果您移动它,而不是移动源代码,它会更改一个名为 m_RootOrder 的 属性 以反映根的零索引顺序。当 yamlmergetool 启动时,它很快就会变得混乱,因为源代码编辑器正在处理看起来相同的行号 + 代码块。正如@thefragen 所指出的,解决这个问题的一个好方法是让您的协作者在不同的场景中工作,以避免潜在的合并问题。