使用 UnityYAMLMerge 工具以语义正确的方式合并 场景场景包含游戏环境和菜单。将每个唯一的场景文件视为一个独特关卡。在每个场景中,放置环境、障碍物和装饰,本质上是设计和构建游戏。 更多信息
请参见 术语表 和 预制件一种资产类型,允许你存储包含组件和属性的完整游戏对象。预制件充当模板,你可以从中在场景中创建新的对象实例。 更多信息
请参见 术语表 文件。该工具可从命令行访问,也可以提供给第三方 版本控制用于管理文件更改的系统。你可以将 Unity 与大多数常见的版本控制工具结合使用,包括 Perforce、Git、Mercurial 和 PlasticSCM。 更多信息
请参见 术语表 软件。
在版本控制项目设置中(菜单:编辑 > 项目设置 > 版本控制),当你选择模式字段中的第三方版本控制工具时,例如 Perforce 或 PlasticSCM,将会显示 智能合并。该菜单具有以下选项
UnityYAMLMerge 工具随 Unity 编辑器一起提供;假设 Unity 安装在标准位置,UnityYAMLMerge 的路径将是
C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
or
C:\Program Files (x86)\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
…在 Windows 上,以及
/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge
…在 Mac OSX 上(使用 Finder 中的“显示包内容”命令访问此文件夹)。
UnityYAMLMerge 附带一个默认的回退文件(称为 mergespecfile.txt,也位于 Tools 文件夹中),该文件指定了在遇到未解决的冲突或未知文件时如何进行。这也允许你将它用作版本控制系统(如 git)的主合并工具,这些系统不会根据文件扩展名自动选择合并工具。mergespecfile.txt 中默认列出了最常见的工具,但你可以编辑此文件来添加新工具或更改选项。
你可以从命令行以独立工具的方式运行 UnityYAMLMerge(运行它而不带任何参数,你可以看到完整的用法说明)。下面给出了常见版本控制系统的设置说明。
.unity
。merge -p %b %1 %2 %r
然后,按照相同的步骤添加 .prefab
扩展名。
将以下文本添加到你的 .git
或 .gitconfig
文件中
[merge]
tool = unityyamlmerge
[mergetool "unityyamlmerge"]
trustExitCode = false
cmd = '<path to UnityYAMLMerge>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
将以下文本添加到你的 .hgrc
文件中
[merge-patterns]
**.unity = unityyamlmerge
**.prefab = unityyamlmerge
[merge-tools]
unityyamlmerge.executable = <path to UnityYAMLMerge>
unityyamlmerge.args = merge -p --force $base $other $local $output
unityyamlmerge.checkprompt = True
unityyamlmerge.premerge = False
unityyamlmerge.binary = False
将以下内容添加到你的 ~/.subversion/config
文件中
[helpers]
merge-tool-cmd = <path to UnityYAMLMerge>
.unity
。 <path to UnityYAMLMerge> merge -p %base %theirs %mine %merged
然后,按照相同的步骤添加 .prefab
扩展名。
.unity
扩展名。 <path to UnityYAMLMerge> merge -p "@basefile" "@sourcefile" "@destinationfile" "@output"
然后,按照相同的步骤添加 .prefab
扩展名。
merge -p $BASE $REMOTE $LOCAL $MERGED
。要自定义 UnityYAMLMerge 合并文件的方式,请配置 mergerules.txt 文件。该文件位于 Unity 安装目录的 Editor/Data/Tools
文件夹中。各种配置选项如下所示。
数组配置部分指示 UnityYAMLMerge 将指定路径视为数组;可以是带键值的“集合”或不带键值的“普通”数组。所有数组的默认操作是混合模式,尝试使用一些已知的启发式方法进行匹配。
[arrays]
set *.GameObject.m_Component *.fileID
set *.Prefab.m_Modification.m_Modifications target.fileID target.guid propertyPath
plain *.MeshRenderer.m_Materials
plain *.Renderer.m_Materials
排除项配置部分指示要从合并中排除哪些路径。如果两边都进行了修改,则将它们视为冲突,并会显示出来供用户输入。
[exclusions]
exclude *.MeshRenderer.m_Materials.*
exclude *.SpriteRenderer.m_Materials
exclude *.SpriteRenderer.m_Color
include *.ParticleSystem.InitialModule
exclude *.ParticleSystem.*
exclude *.ParticleSystem.InitialModule.*
#excludeDepend *.MonoBehaviour m_Script ^m_
excludeIfContains *.MonoBehaviour.* x y z
excludeIfContains *.MonoBehaviour.* r g b
比较部分考虑浮点值之间的微不足道的差异,以根据用户设置忽略这些差异。启用时,浮点比较是相对进行的,以考虑相对误差。你可以通过以下方式配置比较
相对比较值决定 epsilon 以及比较如何随着浮点数相对误差的大小进行缩放。绝对比较截止值决定在哪个点浮点比较从零(在图表上)开始从绝对切换到相对。
注意:比较值应介于浮点 epsilon(~0.00000011921)和 1.0 之间。
[comparisons]
float *.Transform.m_LocalPosition.x 0.0000005
float *.Transform.m_LocalPosition.y 0.0000005
float *.Transform.m_LocalPosition.z 0.0000005
float *.Transform.m_LocalRotation.x 0.00005 0.001
float *.Transform.m_LocalRotation.y
float *.Transform.m_LocalRotation.z 0.00005 0.001
float *.Transform.m_LocalRotation.w