UnityプロジェクトでPerforceを扱う方法

「[Applibot Advent Calendar 2020](https://qiita.com/advent-calendar/2020/applibot)」 8日目の記事になります。
前日は @fu11mated さんの
[行動ログを吐き出すバッチを作ったら便利だった話](https://qiita.com/fu11mated/items/9fcb0b7f93a5977d5efa) という記事でした!

# はじめに
大規模なゲームの開発においては、膨大なリソースを管理する方法についても熟慮する必要があります。リソースをバージョン管理するためのシステムは複数ありますが、私の所属しているプロジェクトではPerforceを選択しています。Perforceの選定理由としては[こちら](https://blog.applibot.co.jp/2018/12/21/perforce-in-applibot/)が参考になると思います。 今回は、このPerforceを用いたUnityでの開発方法について軽くお話しさせていただきたいと思います。Perforceに対する基本的な知識がある前提でお話ししますので、ご了承ください。

# クリエイターの作業フローについて
下記はUnityを用いたプロジェクトにおける作業フローを簡単に図示した例になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544643/19e68b1c-b010-2e00-8506-3bf8ce5c0f45.png)
ここでポイントとなるのが、この辺↓です。
![この辺.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544643/02b82acd-a05a-7a19-fb49-17979794751c.png)

この図の場合では、クリエイターはDCCツール（Mayaなど）で作ったアセットをUnityに取り込み、Unity上で諸々の設定をした後でPerforceにサブミットする必要があります。
この作業はUnityとP4V（Perforceを扱うためのGUIツール）で行うことができます。

ここで考えていただきたいのが、クリエイターは大量のアセットを裁くためにこの作業を繰り返し繰り返し行うということです。
つまり、UnityとP4Vをいったり来たりするのでは無駄な作業が大量に発生してしまいます。

そこで、Unityのみでアセットに対する作業からPerforceへのサブミットまで行うことができれば作業を効率化することができます。
しかしここで問題になるのが、Unityに標準搭載されているPerforceを扱うための機能（公式の呼び方ではないのですが仮にP4Unityと呼ぶことにします）にちょっとしたクセがあることです。

P4Unityのクセというのが、「Perforceでプロジェクト全体を管理することを前提としている」ことです。
つまり、ソースコードをGit管理している状況では使えないということです。

かと言って、ソースコードをPerforceで扱うのは得策とは言えません。
と言うよりコードレビューなどできないので実質不可能です。

なのでソースコードはGit管理しつつ、アセットのみPerforce管理にしたいと考えます。
Git管理されているUnityプロジェクトの中のフォルダの一つがPerforceで管理されているという状況が理想です。

それではその状況にするための方法を説明していきます。

# UnityでPerforceを扱えるようにするための設定
Unityプロジェクトの中のフォルダの一つがPerforceで管理されている状況にするためにはまずストリームのリマップ設定をする必要があります。ストリームのリマップ設定はP4Vで行います。

1. P4Vで該当ディポのワークスペースを開きます。
1. View→StreamでStreamタブを開きます。
1. 該当ストリームを右クリック → Edit Stream *** を選択します。
1. Advanced → Remappedに `... Assets/[アセットを入れるフォルダの名前]/...` を設定します。
![スクリーンショット 2020-12-08 10.46.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544643/14787b6d-26c5-c900-669a-e80f91507343.png)

これでリマップ設定ができました。

次にワークスペースのルートディレクトリをUnityプロジェクトのルートディレクトリに一致させます。（この作業はUnityでPerforceを扱いたい人それぞれが行う必要があります。）

1. P4Vで該当ディポのワークスペースを開きます。
1. View→WorkspaceでWorkspaceタブを開きます。
1. 該当ワークスペースを右クリック → Edit Workspace *** を選択します。
1. Workspace RootにUnityプロジェクトのルートディレクトリを設定します。
![スクリーンショット 2020-12-08 10.54.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544643/7451fe5d-f7fe-46b5-74dc-1fd4d1345460.png)

これでUnityプロジェクトの中のフォルダの一つがPerforceで管理されている状況になりました。

最後にUnityでPerforceの設定を行います。

1. Unityで該当プロジェクトを開きます。
2. Edit→Project SettingsでProject Settingsウインドウを開きます。
2. Project Settingsウインドウの左タブからVersion Controlを選択し、ModeでPerforceを選択します。
3. Perforceの設定を入力してRecconectを押します。
4. Connectedと表示されたら完了です。
![UnityのPerforce設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544643/e380a1ad-375d-41d5-5c05-8c28c1726e60.png)

これでUnity上でPerforceを扱うことができるようになります。

# P4Unityの操作方法
ファイルの最新化を行いたい場合の操作は以下のようになります。

1. Projectタブの更新したいディレクトリまたはファイルを右クリック
2. Version Control→Get Latestを選択
![ファイル更新.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544643/d36e29d5-bdb2-56d0-39a3-0b8415d10845.png)

このように、P4Unityを導入すると右クリックによって簡単に操作ができるようになります。

# まとめ
UnityでPerforceを扱うための方法をご紹介しました。これを読んでいただければ、特に難しくないことがわかるかと思います。導入が難しくてUnityプロジェクトでのPerforceの導入を諦めてた方に、少しでもお役に立てれば幸いです。

# おわりに
「[Applibot Advent Calendar 2020](https://qiita.com/advent-calendar/2020/applibot)」 8日目の記事でした！
明日は @kbt_ さんです！