# バージョン管理のインテグレーション

> Integrate Unity with version control systems.

Unity には 2 つのバージョン管理システムが統合されています。[Perforce](/engine/6000.0/manual/unity-editor/editor-features/version-control/per-force-integration.md) と [Plastic SCM](/engine/6000.0/manual/plastic-scmplugin.md) です。Unity で [バージョン管理](https://unity.com/products/plastic-scm/source-code-management#what-version-control)のインテグレーションを使用するには、Unity プロジェクトに **Perforce** または **Plastic SCM** サーバーを設定する必要があります。

## Unity のバージョン管理の設定

Unity プロジェクトを開き、**Edit** > **Project Settings** に移動して **Version Control** カテゴリを選択します。

| **プロパティ**                            |                        | **説明**                                                                                                                                                                                                                                                                                                                 |
| ------------------------------------ | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Mode**                             |                        | バージョン管理モードを選択します。                                                                                                                                                                                                                                                                                                      |
|                                      | **Hidden Meta Files**  | OS のファイルエクスプローラーで .meta ファイルを非表示にします。Unity はどのモードを選択しても、Project ウィンドウに .meta ファイルを表示しません。                                                                                                                                                                                                                              |
|                                      | **Visible Meta Files** | Unity でサポートされないバージョン管理システムを使用する場合には、このオプションを選択します。これがデフォルトの設定です。これで、選択したバージョン管理システムを使用してソースアセットとそれらのアセットのメタデータを管理できます。                                                                                                                                                                                                 |
|                                      | **Perforce**           | バージョン管理システムとして [Perforce](https://www.perforce.com/) を使用する場合は、このオプションを選択します。                                                                                                                                                                                                                                           |
| **Username**                         |                        | Perforce アカウントに関連付けられたユーザー名を入力します。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                                                                                                                                                                |
| **Password**                         |                        | Perforce アカウントに関連付けられたパスワードを入力します。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                                                                                                                                                                |
| **Workspace**                        |                        | ワークスペースに入力します。例えば、`Example**Workspace**1` です。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                                                                                                                                                     |
| **サーバー**                             |                        | Unity プロジェクトがあるサーバーを入力します。例えば、localhost:1666 です。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                                                                                                                                                  |
| **Host**                             |                        | コンピューターで使用するホスト名を入力します。例えば、workstation123.perforce.com です。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                                                                                                                                        |
| **Log Level**                        |                        | Unity のコンソールログで受け取るバージョン管理情報の量を選択します。                                                                                                                                                                                                                                                                                  |
|                                      | **Verbose**            | バージョン管理に関連するすべての操作をログに記録します。このオプションでは非常に詳細にロギングするため、バージョン管理の設定をデバッグする場合に便利です。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                                                                                                                     |
|                                      | **Info**               | エラー、警告、バージョン管理に関する情報をログに記録します。                                                                                                                                                                                                                                                                                         |
|                                      | **Notice**             | エラーと警告をログに記録します。                                                                                                                                                                                                                                                                                                       |
|                                      | **Fatal**              | Unity は致命的なエラーのみをコンソールに出力します。                                                                                                                                                                                                                                                                                          |
| **状況**                               |                        | バージョン管理システムへの接続状況に関する情報を表示します。接続していない場合は、**Connect** を選択して設定したシステムに接続します。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                                                                                                                         |
| **Automatic Add**                    |                        | この設定を有効にすると、エディターやディスク上のフォルダーを使用してプロジェクトにファイルを追加する場合に、ファイルが自動的にバージョン管理システムに追加されます。この設定を無効にすると、手動でバージョン管理システムにファイルを追加する必要があります。この設定は、デフォルトで有効になっています。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                                              |
| **Work Offline**                     |                        | この設定を有効にすると、オフラインで作業できます。この設定を有効にした場合は、P4V でオフライン作業を調整するか、P4 の reconcile コマンドを使用して、Perforce サーバーデポをオフラインで行った作業で更新する必要があります。詳細については、[Perforce でのオフライン作業](/engine/6000.0/manual/unity-editor/editor-features/version-control/per-force-integration.md.md)を参照してください。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。 |
| **Async Update**                     |                        | この設定を有効にすると、非同期のバージョン管理ステータスクエリを使用できます。有効にすると、Perforce は Unity エディターを停止せずにファイルのバージョン管理ステータスを更新します。バージョン管理サーバーへの接続の待ち時間が長い場合は、この設定を使用します。**注意**: ステータスクエリのみが非同期です。ファイルのステータス変更の操作や、ファイルステータスに関する最新の情報を必要とする操作が、同期的に実行されます。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                         |
| **Show Failed Checkouts**            |                        | このプロパティを有効にすると、Perforce がチェックアウト操作を実行できない場合にダイアログを表示できます。チェックアウト操作ができない問題は、接続が失われた場合や、編集したいアセットを他のユーザーが排他的にチェックアウトした場合に発生することがあります。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                                                               |
| **Overwrite Failed Checkout Assets** |                        | この設定を有効にすると、チェックアウトできないアセットが保存されるようになります。つまり、Perforce がファイルをチェックアウトできない場合でも、Unity によって強制的にファイルに保存されます。これはデフォルトで有効になっています。これを無効にすると、Perforce がチェックアウトできない場合に、ファイルが強制的に保存されません。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                     |
| **Smart Merge**                      |                        | [Smart Merge](/engine/6000.0/manual/unity-editor/editor-features/version-control/smart-merge.md.md) を使うと、同じラインに変更のあるファイルを簡単にマージできます。これは、複数のユーザーが同時に同じプロジェクトで作業している場合に便利です。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                        |
|                                      | **Off**                | Smart Merge を無効にします。                                                                                                                                                                                                                                                                                                   |
|                                      | **Ask**                | Smart Merge を有効にしますが、競合が発生した場合はマージの前に通知が送信されます。これがデフォルトの設定です。                                                                                                                                                                                                                                                          |
|                                      | **Premerge**           | 自動的に Smart Merge を使用します。                                                                                                                                                                                                                                                                                               |
| **Version Packages Outside Project** |                        | Unity プロジェクトのルートフォルダー外のディスク上にあるパッケージがローカルワークスペースにある間に、そのパッケージに加えられた変更を追跡します。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                                                                                                                      |
| **Overlay Icons**                    |                        | エディターにバージョン管理ステータスアイコンを表示するには、この設定を有効にします。このプロパティは、**Mode** が **Perforce** に設定されている場合にのみ表示されます。                                                                                                                                                                                                                        |

**Version Control** 設定を行い、ステータスエリアの横にある **Connect** ボタンを選択して、バージョン管理システムに接続します。Unity がシステムに接続すると、ステータスエリアに **Connected** と表示されます。

リビジョン管理ツールを調整するには、**Preferences** を開き、**External Tools** セクションを選択します。**Revision Control Diff/Merge** にある新しいツールを選択できます。

## Unity でバージョン管理を使用

エディターをバージョン管理システムと連動するように設定すると、バージョン管理クライアントではなく、エディターを使用してバージョン管理の操作を行うことができます。これを行うには、Project ウィンドウでアセットを右クリックします。

バージョン管理の操作は、使用するバージョン管理によって異なります。以下の表は、各バージョン管理で使用可能なアクションを示しています。

| **バージョンコントロール操作**     | **説明**                                                                                    | **Perforce** | **Plastic SCM**                                                                                                                                                    |
| --------------------- | ----------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Get Latest**        | これにより、マシン上のファイルがバージョン管理システム内のファイルと一致するように更新されます。                                          | はい           | 不可。最新の変更を取得してファイルを更新するには、[Version Control ウィンドウ](#window) (**Window > Asset Management > Version Control**) を使用する必要があります。                                          |
| **Submit**            | ファイルの現在の状態をバージョン管理システムに送信します。                                                             | はい           | はい                                                                                                                                                                 |
| **Check Out**         | ファイルに変更を加えることが可能になります                                                                     | はい           | はい                                                                                                                                                                 |
| **Check Out (Other)** | アセットとその .meta ファイルの両方をチェックアウトするか、アセットのみをチェックアウトするか、.meta ファイルのみをチェックアウトするかを選択します。         | はい           | いいえ                                                                                                                                                                |
| **Mark Add**          | バージョン管理にファイルを加えます。                                                                        | はい           | はい                                                                                                                                                                 |
| **Revert**            | 開いているファイルの変更を取り消します。                                                                      | はい           | はい                                                                                                                                                                 |
| **Revert Unchanged**  | 以前にチェックアウトされていて、まだ変更していないファイルから、チェックアウトステータスを除去します。                                       | はい           | はい                                                                                                                                                                 |
| **Resolve Conflicts** | 複数のユーザーによって変更されたファイルの競合を解決します。                                                            | はい           | 不可。コンフリクトはバージョン管理 メニューに表示されますが、Plastic SCM GUI で解決する必要があります。                                                                                                       |
| **Lock**              | 他のユーザーがファイルに変更を送信できないようにします。                                                              | はい           | 不可。Plastic SCM でファイルをロックまたはロック解除するには、特定の Plastic SCM ロックファイルを外部で編集する必要があります。詳細は、[Plastic SCM のインテグレーション](/engine/6000.0/manual/plastic-scmplugin.md)のページを参照してください。 |
| **Unlock**            | ロックを解除し、誰でも変更を送信できるようにします。                                                                | はい           | 不可。Plastic SCM でファイルをロックまたはロック解除するには、特定の Plastic SCM ロックファイルを外部で編集する必要があります。詳細は、[Plastic SCM のインテグレーション](/engine/6000.0/manual/plastic-scmplugin.md)のページを参照してください。 |
| **Diff**              | コンピューターのローカルファイルとサーバーのファイルの違いを比較します。アセットファイルのみを比較するか、アセットファイルとその .meta ファイルを比較するかを選択できます。 | はい           | はい                                                                                                                                                                 |

### ファイルのチェックアウト

Perforce などの一部のバージョン管理システムでは、バージョン管理されたファイルはデフォルトで読み取り専用であり、編集する前にチェックアウトする必要があります (**Work offline** 設定を有効にしている場合を除く)。エディターからバージョン管理されたアセットを操作すると、ファイル編集を有効にする **Check Out** ボタンが Inspector に表示されます。さらに、Project Settings の Inspector には、特定のプロジェクト設定をチェックアウトするための **Checkout** ボタンがあります。

読み取り専用アセットに別のカスタム編集ツールの一部を無効にするカスタムエディタースクリプトコードがある場合、またはバージョン管理されたファイルに手動で書き込む場合は、[AssetDatabase.IsOpenForEdit](/engine/6000.0/script-reference/unity-editor/asset-database/is-open-for-edit.md) API と [AssetDatabase.MakeEditable](/engine/6000.0/script-reference/unity-editor/asset-database/make-editable.md) API を使用して、ファイルの編集が可能なことを確認し、チェックアウト操作を行います。

バージョン管理のインテグレーションでは、カスタムバージョン管理の操作検証ロジックとして、[Provider.PreCheckoutCallback](/engine/6000.0/script-reference/unity-editor-version-control/provider/pre-checkout-callback.md) C# コールバックおよび [Provider.PreSubmitCallback](/engine/6000.0/script-reference/unity-editor-version-control/provider/pre-submit-callback.md) C# コールバックも公開されます。

Unity は、**Save Project** 操作を実行するときに、エディターで変更した、または変更済みとマークされたアセットをディスクに書き込みます。アセットは必要に応じてバージョン管理でチェックアウトされます。これにより、ファイルに実際の変更が発生しなくても、アセットがチェックアウトされる場合があります。これは、アセットが変更されているかどうかを確認せずに、エディタースクリプトがアセットの [EditorUtility.SetDirty](/engine/6000.0/script-reference/unity-editor/editor-utility/set-dirty.md) を呼び出すときに特に頻繁に発生します。

**注意**: Unity がバージョン管理クライアントに変更をコミットできない場合 (例えば、サーバーがダウンしている場合や、ライセンスの問題が発生した場合) は、変更を別の変更セットに保存します。

変更を .scene ファイルに保存すると、Unity はそれを自動的にチェックアウトします。Plastic SCM を使用する場合は、自動的に生成されたライトマップなどのアセットも自動的にチェックアウトされます。

## バージョン管理ウィンドウ

Version Control ウィンドウを使用して、変更リストのファイルを表示できます。このウィンドウにアクセスするには、**Window > Asset Management > Version Control** に移動します。

**Outgoing** タブには、バージョン管理へまだコミットをしていないすべてのローカルの変更が列挙されています。**Incoming** タブには、バージョン管理から取得する必要があるすべての変更がリストされています。

このウィンドウ内でアセットや変更リストを右クリックすると、それらを操作できます。ある変更リストから別の変更リストへアセットを移動するには、アセットをドラッグして移動先の変更リストのヘッダーにドロップしてください。

### アイコン

エディターは、ファイルとアセットのバージョン管理のステータスを視覚化するために以下のアイコンを表示します。

| ****Icon****                                                                                              | **説明**                                                                                                 |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| &#xA;**Frame:**&#xA;![](/api/media?file=/engine/6000.0/media/images/VersionControl_P4_AddedLocal.png)     | ファイルがローカルで加えられ、バージョン管理への追加は保留中です。                                                                      |
| &#xA;**Frame:**&#xA;![](/api/media?file=/engine/6000.0/media/images/VersionControl_P4_AddedRemote.png)    | 別のユーザーによってバージョン管理に加えられたファイル。バージョン管理への追加は保留中です。                                                         |
| &#xA;**Frame:**&#xA;![](/api/media?file=/engine/6000.0/media/images/VersionControl_P4_CheckOutLocal.png)  | ファイルはローカルでチェックアウトされています。                                                                               |
| &#xA;**Frame:**&#xA;![](/api/media?file=/engine/6000.0/media/images/VersionControl_P4_CheckOutRemote.png) | ファイルが別のユーザーによってリモートでチェックアウトされています。                                                                     |
| &#xA;**Frame:**&#xA;![](/api/media?file=/engine/6000.0/media/images/VersionControl_P4_Conflicted.png)     | このファイルのマージに競合が発生しました。解決する必要があります。                                                                      |
| &#xA;**Frame:**&#xA;![](/api/media?file=/engine/6000.0/media/images/VersionControl_P4_DeletedLocal.png)   | ファイルはローカルで削除され、バージョン管理での削除は保留中です。                                                                      |
| &#xA;**Frame:**&#xA;![](/api/media?file=/engine/6000.0/media/images/VersionControl_P4_DeletedRemote.png)  | ファイルは別のユーザーによって削除され、 バージョン管理での削除は保留中です。                                                                |
| &#xA;**Frame:**&#xA;![](/api/media?file=/engine/6000.0/media/images/VersionControl_P4_Local.png)          | バージョン管理に未登録のファイル。**Mark Add** 操作を使用して、ファイルを手動で追加できます。                                                  |
| &#xA;**Frame:**&#xA;![](/api/media?file=/engine/6000.0/media/images/VersionControl_P4_LockedLocal.png)    | ファイルは自身によってロックされており、他のユーザーは変更できません。                                                                    |
| &#xA;**Frame:**&#xA;![](/api/media?file=/engine/6000.0/media/images/VersionControl_P4_LockedRemote.png)   | ファイルは別のユーザーによってロックされており、変更できません。                                                                       |
| &#xA;**Frame:**&#xA;![](/api/media?file=/engine/6000.0/media/images/VersionControl_P4_OutOfSync.png)      | 別のユーザーがこのファイルの別バージョンをチェックインしました。最新バージョンを取得するには、**Apply Incoming Changes** 操作を使用してください。                 |
| &#xA;**Frame:**&#xA;![](/api/media?file=/engine/6000.0/media/images/VersionControl_P4_AsyncUpdate.png)    | サーバーがこのファイルのバージョン管理状況をリクエストしています。または、返答を待機しています。これは、Perforce のような集中管理されたバージョン管理システムを使用している場合にのみ表示されます。 |
