Unity3D:智能合并
推荐:将NSDT场景编辑器加入你的3D工具链。
3D工具集:NSDT简石数字孪生
智能合并
使用 UnityYAMLMerge 工具进行合并现场和预置以语义正确的方式文件。该工具可以从命令行访问,也可供第三方使用版本控制软件。
在 Unity 中设置智能合并
在“版本控制”项目设置(菜单:“编辑>项目设置”>“版本控制”)中,当您在“模式”字段中选择第三方版本控制工具(例如 Perforce 或 PlasticSCM)时,将显示“智能合并”。该菜单具有以下选项:
- 关闭:仅使用首选项中设置的默认合并工具,而不使用智能合并。
- 预合并:启用智能合并,接受干净合并。不干净的合并将创建文件的基本版本、他们的版本和我的版本的预合并版本。然后,将它们与默认合并工具一起使用。
- 询问:启用智能合并,但在发生冲突时,显示一个对话框让用户解决它(这是默认设置)。
设置 UnityYAMLMerge 以与第三方工具一起使用
UnityYAMLMerge工具随Unity编辑器一起提供;假设 Unity 安装在标准位置,则 UnityYAMLMerge 的路径将为:
C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
or
C:\Program Files (x86)\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
...在窗口和
/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge
...中(使用“访达”中的“显示包内容”命令访问此文件夹)。
UnityYAMLMerge 附带了一个默认的回退文件(称为 mergespecfile.txt,也位于“工具”文件夹中),该文件指定如何处理未解决的冲突或未知文件。这也允许您将其用作版本控制系统(如 git)的主要合并工具,这些系统不会根据文件扩展名自动选择合并工具。默认情况下,最常用的工具已在 mergespecfile 中列出.txt但您可以编辑此文件以添加新工具或更改选项。
您可以从命令行将 UnityYAMLMerge 作为独立工具运行(您可以通过运行它来查看完整的使用说明,而无需任何参数)。常见版本控制系统的设置说明如下。
P4V
- 转到首选项>合并。
- 选择“其他应用程序”。
- 单击添加按钮。
- 在扩展名字段中,键入 。
.unity
- 在“应用程序”字段中,键入 UnityYAMLMerge 工具的路径(见上文)。
- 在参数字段中,键入
merge -p %b %1 %2 %r
- 单击保存。
然后,按照相同的过程添加扩展。.prefab
吉特
将以下文本添加到您的 or 文件中:.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
SVN
将以下内容添加到您的文件中:~/.subversion/config
[helpers]
merge-tool-cmd = <path to UnityYAMLMerge>
Git
- 转到首选项>比较查看器>合并工具,然后单击高级按钮。
- 在弹出窗口中,键入扩展名字段。
.unity
- 在“外部程序”字段中键入:
<path to UnityYAMLMerge> merge -p %base %theirs %mine %merged
然后,按照相同的过程添加扩展。.prefab
塑料单片机
- 转到首选项>合并工具,然后单击添加按钮。
- 选择“外部合并工具”。
- 选择“与与以下模式匹配的文件一起使用”。
- 添加扩展。
.unity
- 输入命令:
<path to UnityYAMLMerge> merge -p "@basefile" "@sourcefile" "@destinationfile" "@output"
然后,按照相同的过程添加扩展。.prefab
源树
- 转到“工具”>“选项”>“差异”。
- 在“合并工具”下拉列表中选择“自定义”。
- 在“合并命令”字段中键入 UnityYAMLMerge 的路径。
- 在参数字段中键入。
merge -p $BASE $REMOTE $LOCAL $MERGED
配置合并规则.txt
要自定义 UnityYAMLMerge 合并文件的方式,请配置合并规则.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
排除
排除配置部分指示要从合并中排除的路径。如果双方都已修改,则它们将被视为冲突,并将显示以供用户输入。
- <mode> 是 “include”、“exextude”、“includeIfContains”、“excludeIfContains” 之一
示例(根据默认合并规则文件)
[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
比较
比较部分考虑了要忽略的每个用户设置的浮点值之间的可忽略差异。启用后,将相对进行浮点比较以考虑相对误差。您可以通过以下方式配置比较:
- “float”<要比较的 float 值>(这会将 epsilon 设置为接近机器 epsilon 的默认值)
- “浮点”<浮点值进行比较> <相对比较值和绝对截止值>
- “浮点数”<浮点值进行比较> <相对比较值> <绝对比较截止值>
相对比较值决定了 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
此文由3D建模学习工作室整理翻译,转载请注明出处!