Version: 2021.1
外部バージョン管理システムの使用
複数シーンの編集

Smart Merge

Unity には意味的に正しい方法でシーンやプレハブのファイルをマージすることができる UnityYAMLMerge というツールが組み込まれています。このツールは、コマンドラインからアクセスでき、サードパーティのバージョン管理ソフトウェアも利用可能です。

Unity で Smart Merging の設定

Editor ウィンドウ (Edit> Project Settings の順に移動し、Editor カテゴリを選択) で、サードパーティ製のバージョン管理ツール (Perforce や PlasticSCM など) を選択することができます。これらのツールの 1 つが有効になっている場合、Version Control 見出しの下に Smart Merge メニューが表示されます。メニューには 4 つのオプションがあります。

  • Off: スマートマージのない環境設定でデフォルトのマージツールだけを使用します。
  • Premerge: スマートマージを有効にし、clean merges をアクセプトします。Unclean merges は、それらのものとファイル自身をベースに premerged バージョンを作成します。それから、デフォルトのマージツールでこれらを使用します。
  • Ask: スマートマージを有効にしても、コンフリクトが発生した場合、ユーザに、それを解決させるためのダイアログを表示します(これはデフォルトの設定です)。

サードパーティのツールで使用する UnityYAMLMerge の設定

UnityYAMLMerge ツールは、Unity editor が同梱されています。 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

…MacOSX 上で (このフォルダーにアクセスするには、Finder から Show Package Contents コマンドを使用します。)

UnityYAMLMerge は、それがどのように未解決のコンフリクトまたは未知のファイルを続行するかを指定するデフォルトのフォールバックファイル( Tools フォルダーでも mergespecfile.txt と呼ばれます)が同梱されています。これはまた、ファイル拡張子に基づいて自動的にマージツールを選択しない(例えば、git のような)バージョン管理システムのための主要なマージツールとしてそれを使用することができます。もっとも一般的なツールは、すでにデフォルトで mergespecfile.txt にリストされていますが、新しいツールや変更オプションを追加するために、このファイルを編集することができます。

コマンドラインからスタンドアロンツールとして UnityYAMLMerge を実行することができます(引数なしでそれを実行すると、対応するすべての手順を参照することができます)。一般的なバージョン管理システム用のセットアップ命令を以下に示します。

P4V

  • Preferences > Merge に移動します。
  • Other application を選択します。
  • Add ボタンをクリックします。
  • extension フィールドに、.unity と入力します。
  • Application フィールドに、UnityYAMLMerge ツールへのパスを入力します(上記参照)。
  • Arguments フィールドに、merge -p %b %1 %2 %r と入力します。
  • Save をクリックします。

そして、.prefab 拡張子を追加するには、同じ手順にしたがってください。

Git

.git または .gitconfig ファイルに次のテキストを追加します。

    [merge]
        tool = unityyamlmerge

        [mergetool "unityyamlmerge"]
        trustExitCode = false
        cmd = '<path to UnityYAMLMerge>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"

Mercurial

.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>

TortoiseGit

  • Preferences > Diff Viewer > Merge Tool に移動し、Advanced ボタンをクリックします。
  • ポップアップした extension フィールドに、.unity と入力します。
  • External Program フィールドに次のように入力します。
    <path to UnityYAMLMerge> merge -p %base %theirs %mine %merged

そして、.prefab 拡張子を追加するには、同じ手順にしたがってください。

PlasticSCM

  • Preferences > Merge Tools に移動し、Add ボタンをクリックします。
  • External merge tool を選択します。
  • Use with files that match the following pattern を選択します。
  • .unity 拡張子を追加します。
  • 次のコマンドを入力します。
    <path to UnityYAMLMerge> merge -p "@basefile" "@sourcefile"  "@destinationfile" "@output"

そして、.prefab 拡張子を追加するには、同じ手順にしたがってください。

SourceTree

  • Tools > Options > Diff に移動します。
  • Custom in the Merge Tool のドロップダウンで Custom を選択します。
  • Merge Command テキストフ​​ィールドに UnityYAMLMerge へのパスを入力します。
  • Arguments テキストフ​​ィールドに merge -p $BASE $REMOTE $LOCAL $MERGED と入力します。

Configuring mergerules.txt

To customize how UnityYAMLMerge merges files, configure the mergerules.txt file. This is available in the Editor/Data/Tools folder of your Unity installation. The various configuration options are as follows.

配列

The arrays configuration section tells UnityYAMLMerge to treat the specified path as an array; either as a “set” with a key value, or as a “plain” array without key values. The default for all arrays is to do a hybrid mode and try to match with some known heuristics.

  • <mode> is one of “set” or “plain”

Example (as per default mergerules file)

[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

The exclusions configuration section indicates which paths to exclude from merging. If both sides have been modified, they are then treated as a conflict and will show up for user input.

  • <mode> is one of “include”, “exclude”, “includeIfContains”, “excludeIfContains”

Example (as per default mergerules file)

[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

Comparisons

The comparisons section takes into account negligible differences between float values to ignore per user settings. When enabled, floating point comparison is done relatively to account for relative error. You can configure comparison in the following ways:

  • “float” <float value to compare> (This sets epsilon to a default value close to machine epsilon)
  • “float” <float value to compare> <relative comparison value and absolute cutoff>
  • “float” <float value to compare> <relative comparison value> <absolute comparison cutoff>

The relative comparison value determines epsilon and how comparison will scale with the size of the floats’ relative error. The absolute comparison cutoff determines at which point float comparison switches from absolute to relative from zero (on a graph).

Note: Comparison values should be between float epsilon (~0.00000011921) and 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
外部バージョン管理システムの使用
複数シーンの編集