[Unity]オレオレおすすめUnityフォルダ構成とGit管理

動機

Unityでプロトタイピング的にコンテンツづくりを進めていくと

  • 『XXXを試したい。だめだった。次はYYYを試してみよう』
  • デザイナさん、モデラーさんがテクスチャやモデルを更新したから使ってみよう
  • 誰かが作ってくれたunitypackageを使いたい、AssetStoreのアセット使いたい

とかを繰り返していると、StandardAssetディレクトリがいろんな場所に散見したり
PrefabやScript、Material、Shaderがバラバラになっていたりして、
『よし、方針決まったから、ちゃんとしよう』となったときに、収集がつかなくなります
(僕がそうだった)

多分経験豊富な方であれば、最初から、ある程度の構成や方針を決めてから
作業に当たると思うのですが、場当たり的にスクリプトやシェーダー書いてたりして
終盤つらくなったので、こうすればよかったかも、をまとめてみました。

結論から

こんなディレクトリ構成がいいかなーと思いました。

  • Assets/
    • CGINC/
    • [ApplicationName]/Shaders/
      • Material/ マテリアルを定義したシェーダーの置き場
      • Object/ 3Dオブジェクト用シェーダー
      • 2D/ 2Dスプライト用のシェーダー
      • UI/ UI用のシェーダー
      • Particle/ Particleのシェーダー
      • Effect/ ImageEffect用シェーダー
      • Compute/ コンピュートシェーダーの置き場
    • [ApplicationName]/Materials/
      • Object/ 3Dオブジェクトのマテリアル
      • 2D/ 2Dスプライトとかのマテリアル
      • UI/ UIのマテリアル
      • Particle/ Particleのマテリアル
      • Effect/ ImageEffectとかのマテリアル
    • [ApplicationName]/Scripts/
      • [namespace] 名前空間は適当に定義してください
      • Editor/ エディタ拡張
      • Behavior/ MonoBehavior継承したやつ (これ以下でもっと細かくいきたい)
      • Library/ MonoBehavior継承してないけど他から使いたいやつ (Libraryだと粒度でかすぎる場合は適当な名前空間をディレクトリ名にする)
    • [ApplicationName]/Scene/
      • Test/ テスト用のシーン
      • Game/ ゲームのシーン (これはナシで直下でもいいかも)
    • [ApplicationName]/Prefabs/
      • Resources/ スクリプトから文字列で参照したいPrefabがある場合 (あんま使わないほうがいいような気がしてる)
      • Object/ Rendererを持ってるやつ
      • Particle/ パーティクル系
      • Etc/ それ以外
    • Plugins/
    • Externals/
    • Models/
    • Texture/

以下に下記ディレクトリの用途ざっくり

CGINC

cgincファイルを置いておく。#include “/CGINC/hoge.cginc”でインクルードできる


[ApplicationName]

AssetStore等外部から持ってきたアセットが入り込まないようにするために
Assets/を一階層下げる(アプリの名前とか入れたらいいかなぁ)

主に開発で増えたり変更されるファイルはほとんどここに置きたい

以下に子ディレクトリの用途を挙げます。

-Shaders

アプリで利用する各種シェーダの置き場

-Materials

アプリで利用するマテリアル置き場

-Scripts

アプリで利用するスクリプト置き場

-Scene

ゲームのシーン。テスト用と、実際にゲームで利用されるもの

-Prefabs

ゲームで利用されるPrefabたち 


Plugins

dllファイル置き場


Externals

AssetStoreとかunitypackage等で外部からインポートしたアセットたちを入れる


Models

FBXとかOBJファイルを入れる。


Texture

テクスチャ置き場


こんな感じ。

MaterialってShaderありきのものだから、セットにしたほうがいいかな、
Prefabのサブディレクトリ、もっといい感じに切れないかな。
Scriptの名前空間、用途別に汎用的にしたいなぁ

などの、葛藤もありますが、とりあえず。

TextureとModels以下には、それ以外のものを置かないのが重要。

fbxに含まれているアニメーションやマテリアルを編集したりしないように。

fbxやobjは必ずPrefabにしてM使う。
マテリアルも変更加えたい場合はコピーしてMaterialディレクトリに入れて使う

Gitで管理したい

管理したいファイルの合計サイズが大きくなりすぎて
pushもpullもエラーになってしまう、というケースがありました。

加えて、エラーが出てはじめて知ったのですが、
bitbucketはリポジトリサイズ2GB以上になるとPUSHができなくなります。

githubのほうは1GB以上で警告があるだけですが、単一ファイルサイズの
上限は100MBまでとなっています。

単一ファイルのサイズは、一旦置いておくとして、2GB制限でPUSHできなくなる、というのは
避けたい。(自分で公開サーバでGitをホスティングしていれば別ですが)

なので、更新頻度が低い、もしくはサイズが大きくなりがちなディレクトリは、
submoduleに分けることにしました。
Bitbucketの制限も回避できますし、単一リポジトリのpullも早くなります。
(もちろんsubmdule updateも含めれば、大差ないかもしれませんが、ハングアップ
はしづらくなるはず)

で、それも考慮して↑の構成です。
サブモジュールにするのは

  • Modelsディレクトリ
  • Texutreディレクトリ

の2つ。
両方併せてもたいしたサイズにならないのがわかりきってるなら
1つにしてもいいかも。

どうでしょう。他の人がどうやってるのか、理由を併せていろいろ知りたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です