Version: 6000.3
语言: 中文
Perforce集成
Diff 工具支持

智能合并

使用 UnityYAMLMerge 工具合并场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,您可以放置环境、障碍物和装饰,实质上是分批设计和构建游戏。更多信息
请参阅术语表
预制件一种资产类型,允许您存储包含组件和属性的游戏对象。预制件充当模板,您可以从中在场景中创建新的对象实例。更多信息
请参阅术语表
文件以语义正确的方式。该工具可以从命令行访问,也可供第三方使用版本控制用于管理文件更改的系统。您可以将 Unity 与最常见的版本控制工具结合使用,包括 Perforce、Git、Mercurial 和 PlasticSCM。更多信息
请参阅术语表
软件。

在 Unity 中设置智能合并

在版本控制项目设置(菜单:编辑>项目设置>版本控制)中,当您在模式字段中选择第三方版本控制工具(例如 Perforce 或 PlasticSCM)时,将显示智能合并。该菜单具有以下选项:

  • 关闭:仅使用首选项中设置的默认合并工具,不进行智能合并。
  • 预合并:启用智能合并,接受干净合并。不干净的合并将创建文件的基本版本、他们的版本和我的版本的预合并版本。然后,将它们与默认合并工具一起使用。
  • 询问:启用智能合并,但当发生冲突时,显示一个对话框以让用户解决它(这是默认设置)。

设置 UnityYAMLMerge 以与第三方工具一起使用

UnityYAMLMerge 工具随 Unity 编辑器一起提供;假设 Unity 安装在标准位置,则 UnityYAMLMerge 的路径将为:

C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe

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 作为独立工具运行(您可以通过在没有任何参数的情况下运行它来查看完整的使用说明)。下面给出了常见版本控制系统的设置说明。

P4V的

  1. 转到首选项>合并。
  2. 选择其他应用程序
  3. 单击“添加”按钮。
  4. 在分机字段中,键入.unity.
  5. 在“应用程序”字段中,键入 UnityYAMLMerge 工具的路径(见上文)。
  6. 在参数字段中,键入merge -p %b %1 %2 %r
  7. 点击保存。

然后,按照相同的步骤添加.prefab外延。

Git

将以下文本添加到您的.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>

吉特

  1. 转到首选项>差异查看器>合并工具,然后单击高级按钮
  2. 在弹出窗口中,键入.unity在扩展字段中。
  3. “外部计划”字段中,键入:
    <path to UnityYAMLMerge> merge -p %base %theirs %mine %merged

然后,按照相同的步骤添加.prefab外延。

塑料单片机

  1. 转到首选项>合并工具,然后单击添加按钮
  2. 选择外部合并工具。
  3. 选择“与与以下模式匹配的文件一起使用”
  4. 添加.unity外延。
  5. 输入命令:
    <path to UnityYAMLMerge> merge -p "@basefile" "@sourcefile"  "@destinationfile" "@output"

然后,按照相同的步骤添加.prefab外延。

源树

  1. 转到“工具”>“选项”>“差异”。
  2. 在合并工具下拉列表中选择自定义。
  3. 在“合并命令”字段中键入 UnityYAMLMerge 的路径。
  4. 类型merge -p $BASE $REMOTE $LOCAL $MERGED参数字段中。

配置mergerules.txt

要自定义 UnityYAMLMerge 合并文件的方式,请配置 mergerules.txt 文件。这在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”、“exclude”、“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

参数

--nomappinginoneline参数类似于EditorSettings.serializeInlineMappingsOnOneLineUnity 中的 API。

要禁用单行格式,请在运行合并工具时包含此参数。当--nomappinginoneline选项处于活动状态时,每当一行超过 80 个字符时,该工具都会尝试将 YAML 数据拆分为多行。

此参数有助于保持 Unity 生成的文件和 mergetool 生成的文件之间的一致性。

比较

比较部分考虑了浮点值之间的微不足道的差异,以忽略每个用户设置。启用后,将相对进行浮点比较,以考虑相对误差。您可以通过以下方式配置比较:

  • “float” <要比较的浮点值> (这将 epsilon 设置为接近机器 epsilon 的默认值)
  • “float”<要比较的浮点值> <相对比较值和绝对截止值>
  • “float” <要比较的浮点值> <相对比较值> <绝对比较截止值>

相对比较值决定了 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
Perforce集成
Diff 工具支持