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: スマートマージを有効にし、クリーンなマージをアクセプトします。クリーンではないマージは、Base (変更を始めた最も古いバージョン)、Theirs (Base ファイルに対して他人が変更した結果)、Mine (Base ファイルに対して自分が変更した結果) のマージ前のバージョンを作成し、それから、デフォルトのマージツールでそれらを使用します。
  • 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

上は Mac OSX 用 (このフォルダーにアクセスするには、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 と入力します。

mergerules.txt の設定

UnityYAMLMerge がファイルをマージする方法をカスタマイズするには、mergerules.txt ファイルを設定します。これは、Unity インストールの Editor/Data/Tools フォルダーにあります。 様々な設定オプションは以下の通りです。

Arrays

Array (配列) の設定セクションでは、UnityYAMLMerge に指定したパスを配列として扱うように指示できます。すべての配列のデフォルトは、ハイブリッドモードで、いくつかの既知のヒューリスティックでマッチングを試みます。

  • <モード> は “set ” か “plain” のいずれかです。

例 (デフォルトの mergerules ファイルによる)

[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

Exclusions (除外) 設定セクションでは、どのパスをマージから除外するかを示します。両方が変更されている場合、これらは競合として扱われ、ユーザーが入力できるように表示されます。

  • <モード> は、“include”、“exclude”、“includeIfContains”、“excludeIfContains” のいずれかです。

例 (デフォルトの mergerules ファイルによる)

[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

Comparisons (比較) セクションでは、ユーザー設定に基づいて、浮動小数点値間の無視できる差を考慮します。有効にすると、浮動小数点の比較が相対的に行われ、相対的な誤差が考慮されます。比較は以下の方法で設定できます。

  • “float” <比較する float 値> (これにより、イプシロンをマシンのイプシロンに近いデフォルト値に設定します)
  • “float” <比較する float 値> <絶対的な比較カットオフ値>
  • “float” <比較する float 値> <相対的な比較値> <絶対的な比較カットオフ値>

相対的な比較値は、イプシロンと、float の相対誤差の大きさに応じた比較のスケール方法を決定します。絶対的な比較カットオフ値は、float の比較が絶対からゼロからの相対に切り替わるポイントを決定します (グラフ上)。

ノート: 比較値は、float イプシロン (~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
外部バージョン管理システムの使用
複数シーンの編集