Twitterで話題に上がっていたので、自分なりのやり方を。
ディレクトリ構成
Assets/下
自分で作るものはAssets/下にフォルダを作り、そこにまとめています。
Assets └── MY_PROJECT_NAME ├── Materials ├── Prefabs ├── Scenes ├── Scripts │ ├── Editor │ └── Runtime ├── Tests │ ├── Editor │ └── Runtime └── etc...
"Runtime" のところは、規模が大きければ機能やレイヤごとに分けたりします*1。
スクリプトを置くフォルダおよび直下のAssembly Definition File (.asmdef)を作ってくれるエディタ拡張を公開しました。 これを使うと簡単にセットアップできます。[2021.5.7追記]
Assets外
主にビルドスクリプト*2で以下のように指定しています。いずれも.gitignore(後述)で除外指定されているところ。
.gitignore
giboでベースを生成
.gitignoreファイルはgiboで生成したベースに、プロジェクトごとの設定を追加しています。
私はIDEにJetBrains Riderを使っているので、次のように。
$ gibo dump Unity JetBrains >> .gitignore
これで、以下2つの定義が連結された.gitignoreができます。
- gitignore/Unity.gitignore at main · github/gitignore · GitHub
- gitignore/JetBrains.gitignore at main · github/gitignore · GitHub
Rider以外のIDEを使用する場合は JetBrains
を
VisualStudio
や
VisualStudioCode
に置き換えます。
なお、OSごとの定義はあらかじめグローバルの.gitignoreに設定されている前提ですが、gitに不慣れなメンバーもいる状況では macOS や Windows を加えてもいいでしょう。
プロジェクト固有の定義を追加
必要に応じて、.gitignoreに追加していきます。
3rd partyのアセットをすべて除外したいケース
まず極端な例。公開 or 納品するプロジェクトなど、3rd partyのアセットをすべて除外したい場合は、以下のようにMY_PROJECT_NAME以外をすべてトラックしないようにします*4。
/Assets/* !/Assets/MY_PROJECT_NAME*
なお、スラッシュを含めず*
を書いているのは、ディレクトリの.metaファイルも含めるためです。
特定のアセットだけ個別に除外したいケース
すべてではない場合、シートライセンスのエディタ拡張など、リポジトリに含めたくないものを個別に指定していきます。例えば、
/Assets/ConsolePro* /Assets/StompyRobot*
同様に、Assets/下に生成されるファイルでトラックしたくないものも追加していきます。代表的なものは以下。
Play modeテスト実行時に作られて、まれによく残ってしまうScene
/Assets/InitTestScene*.unity*
Automated QA パッケージのRecorded Testing機能実行時に自動生成されるもの [2021.5.7追記]
/Assets/AutomatedQA/Temp*
Build Report Inspector パッケージが自動生成するもの
/Assets/BuildReports*
Unity Recorderパッケージのデフォルト出力先 [2021.7.22追記]
/Recordings/
ML-Agents パッケージがトレーニング時に自動生成するもの [2021.5.7追記]
/Assets/ML-Agents* /results/
NuGetForUnity がDLLを展開するところ *5 *6 [2021.5.22修正]
/Assets/Packages/ /Assets/Packages.meta
VRCSDK がアップロード用にプロジェクトルートに作るファイル
/*.unitypackage
UniVRM が生成する中間ファイル
/Assets/*.vrm /Assets/*.vrm.meta
Code Coverage パッケージの設定ファイル
*7
*8
/ProjectSettings/Packages/com.unity.testtools.codecoverage/
こちらの設定を入れた.gitignoreは、GitHub - nowsprinting/UnityTestExamples: 『Unity Test Framework完全攻略ガイド 第2版』サンプルコードリポジトリからダウンロードしてお使いいただけます。
$ curl -o .gitignore https://raw.githubusercontent.com/nowsprinting/UnityTestExamples/master/.gitignore
アセット提供側が気をつけたいこと
アセット提供側としても、自身のアセットはAssets/直下に置くのでなくディレクトリを切るべきです(以下MY_ASSET_NAMEとします)。
また、再配布可能な他者のアセットを同梱する場合は、MY_ASSET_NAMEの下ではなく、オリジナルのディレクトリに置くと、他のアセットとの競合を避けられます(利用者側がインポート時に判断できます)。
アセットの設定ファイルをAssets/MY_ASSET_NAME/下に置いてパス指定で読み書きしてしまうと、ユーザがディレクトリを変更できなくなり不便です。 設定は、 Settings Manager パッケージを使用してProjectSettings/下に保存するようにすると使いやすくなります(Unity 2018.3 以降)。
また、UPM (Unity Package Manager) パッケージ形式で作ったアセットをunitypackage形式で配布することもできます。詳しくはこちらの記事を参照してください。[2021.5.7追記]
*1:直下にAssembly Definition File (.asmdef) を置いてアセンブリを分ける前提
*3:Code Coverage packageの場合、設定で出力先を変更できます
*4:ただし、エディタ拡張だけでなくランタイムのスクリプトその他も除外するのは、納品には良いのですがCIで不便です。Gitはこの設定で、CIはignore定義が別のUnity Collaborateにするという手もあります
*5:Nuget | Restore Packages で復元可能なため
*6:末尾*を使用していないのは、インストール済みパッケージ情報を保持している/Assets/packages.configはトラッキングしたいため、ケースセンシティブでないOS対策です