Twitterで話題に上がっていたので、自分なりのやり方を。
ディレクトリ構成
Assets/下
自分で作るものはAssets/下にディレクトリ (Folder) を作り、そこにまとめています。
- Assets
- MY_PROJECT_NAME
- Scripts
- Tests
- とか
- MY_PROJECT_NAME
Editor/の置き場所は、MY_PROJECT_NAME/の直下だったり、MY_PROJECT_NAME/Scripts/下だったり、毎回定まっていません*1。
Assets外
主にビルドスクリプト*2で以下のように指定しています。いずれも.gitignore(後述)で除外指定されているところ。
- ビルド成果物は Builds/
- ログは Logs/
- テスト結果も Logs/
- コードカバレジ*3も Logs/
.gitignore
giboでベースを生成
.gitignoreファイルはgiboで生成したベースに、プロジェクトごとの設定を追加しています。
私はIDEにJetBrains Riderを使っているので、次のように。
$ gibo dump Unity JetBrains >> .gitignore
これで、以下2つの定義が連結された.gitignoreができます。
- gitignore/Unity.gitignore at master · github/gitignore · GitHub
- gitignore/JetBrains.gitignore at master · github/gitignore · GitHub
Rider以外のIDEを使用する場合は JetBrains
を
VisualStudio
や
VisualStudioCode
に置き換えます。
なお、OSごとの定義はあらかじめグローバルの.gitignoreに設定されている前提ですが、gitに不慣れなメンバーもいる状況では macOS や Windows を加えてもいいでしょう。
プロジェクト固有の定義を追加
必要に応じて、.gitignoreに追加していきます。
まず極端な例。公開 or 納品するプロジェクトなど、3rd partyのアセットをすべて除外したい場合は、以下のようにMY_PROJECT_NAME以外をすべてトラックしないようにします*4。
/Assets/* !/Assets/MY_PROJECT_NAME*
なお、スラッシュを含めず*
を書いているのは、ディレクトリの.metaファイルも含めるためです。
すべてではない場合、シートライセンスのエディタ拡張など、リポジトリに含めたくないものを個別に指定していきます。例えば、
/Assets/ConsolePro*
同様に、Assets/下に生成されるファイルでトラックしたくないものも追加します。代表的なものは以下。
Play Mode tests実行時に作られて、まれによく残ってしまうScene
/Assets/InitTestScene*.unity*
Build Report Inspector
/Assets/BuildReports*
VRCSDKがアップロード用にプロジェクトルートに作るファイル
/*.unitypackage
UniVRMで生成する中間ファイル
/Assets/*.vrm /Assets/*.vrm.meta
Code Coverage packageの設定ファイル*5*6
/ProjectSettings/Packages/com.unity.testtools.codecoverage/
アセット提供側が気をつけたいこと
アセット提供側としても、自身のアセットはAssets/直下に置くのでなくディレクトリを切るべきです(以下MY_ASSET_NAMEとします)。
また、再配布可能な他者のアセットを同梱する場合は、MY_ASSET_NAMEの下ではなく、オリジナルのディレクトリに置くと、他のアセットとの競合を避けられます。
アセットの設定ファイルをAssets/MY_ASSET_NAME/下に置いてパス指定で読み書きしてしまうと、ユーザがディレクトリを変更できなくなり不便です。 設定は、 Settings Manager package を使用してProjectSettings/下に保存するようにすると使いやすくなります(Unity 2018.3 以降)。
*1:Editor/は、Assets/直下でなくどこにあってもEditor扱いされますし、asmdefファイルを置けばEditorという名前でないディレクトリをEditor扱いすることも可能です
*3:Code Coverage packageの場合、設定で出力先を変更できます
*4:ただし、エディタ拡張だけでなくランタイムのスクリプトその他も除外するのは、納品には良いのですがCIで不便です。Gitはこの設定で、CIはignore定義が別のUnity Collaborateにするという手もあります