プロジェクトのフォルダ構成を模索し続けています。
結局わかりやすけりゃ何でもいいような気もしますが、皆さんのおすすめのプロジェクトフォルダ構成を教えてください。
私もまだまだ模索中ですが最近はずっとこんな感じでやっています。
Linuxのシンボリックリンクが複数プロジェクト同期できて良いですね。
「shared」と自作アドオン、よく使うアドオンなどで共有できています。
複数形のsはすべてなしで統一しています。
特殊なのを判断しなくていいので、脳みそつかわなくて楽です。
addonsはしょうがなしです。
シーンで分けてリソースや素材を一緒にいれることもやりましたが
複数シーン共有やるやつの仕分けがごっちゃになるのでやめて「asset」「resource」と分けましたが、こちらのほうがプロジェクトがでかくなっても楽ですね。
また「TabbyExplorer」というアドオンがお気に入り機能をうまく活用できるのでよく使っています。
これのおかげで遠いディレクトリの移動が楽で良いですね。
「Collapse Folder」も開きすぎたときに上までホイールしなくても全部閉じれていい感じです。
フォーラムだと文章いっぱい書けていいですね。
ドキュメントのベストプラクティスのProject organizationページに「アセットをシーンの近くにできるだけまとめるのがいい」という記述があって、デモプロジェクトもPlatformer 3Dあたりがそんな感じになってたので真似してます。
最近ウェブ方面などだと機能ごとのフォルダ分け(Feature-Driven Folder Structure)が主流になりつつあるという話題があるのですが(理由としては特定の機能に関連するファイルが一箇所にまとまって把握しやすいとか、機能が要らなくなったときにフォルダを消せば関連アセットが綺麗に消えるとかがあると思います)、この考えに照らせば、Godotでも機能としてのシーンごとにフォルダを切ってアセットをまとめる基本的な方針は理にかなっているのかなと思いました。
ただ、プロジェクト規模が大きくなると分業の観点などからアセットの種類ごとにフォルダ分けしたり逸脱したほうが良い場面が出てきそうで、臨機応変に考える感じになりそうだなあって思います(今のところGodotでそこまで大きなもの作れてない……)。
最近作ったゲームのフォルダ構成
github.com/yukkie8058/gravity-bird
├── addons
│ └── ...
├── background
│ ├── background_changer.gd
│ ├── backgrounds
│ │ ├── backgrounds.tres
│ │ ├── set1_background.png
│ │ ├── set2_background.png
│ │ ├── set3_background.png
│ │ └── set4_background.png
│ └── foregrounds
│ └── ...
├── bird
│ ├── bird.gd
│ ├── dead.png
│ └── fall.png
├── camera.gd
├── default_theme.tres
├── edge_wall.gd
├── export # エクスポートプリセット内で出力フォルダに指定するフォルダ。
│ └── ...
├── export_presets.cfg
├── icon.png
├── main.gd
├── main.tscn
├── main_state.gd
├── pipes
│ ├── pipe.gd
│ ├── pipe_manager.gd
│ ├── tile_blue_middle.png
│ ├── tile_blue_top.png
│ ├── tile_brown_middle.png
│ ├── tile_brown_top.png
│ ├── tile_green_middle.png
│ ├── tile_green_top.png
│ ├── tile_yellow_middle.png
│ └── tile_yellow_top.png
├── plug.gd
├── project.godot
├── ui
│ ├── Kenney Future Square.ttf
│ ├── button_square_depth_flat.png
│ ├── button_square_flat.png
│ ├── game.gd
│ ├── game_over.gd
│ ├── idle.gd
│ └── twitter_logo.png
└── utils # 他のプロジェクトでも使えそうなものを入れるフォルダ。
├── tweet_button.gd
└── visible_state.gd
僕の中でのルールはこんな感じです。
- ごちゃごちゃになりそうになったら機能ごとにフォルダを分ける。
- 他のプロジェクトでも使えそうなものは全部
utils/
に入れる。 - フォルダ名はそれぞれ違うものを複数入れるなら複数形に、その機能のものをまとめるなら単数系にする。
僕の別のプロジェクトでは、シーン・スクリプトに対して画像などのアセットの量が多かったのでassets/
とscripts/
内で機能ごとに分けるようにしてます。
種類ごとに分けたやつ
project-root
├── project.csproj
├── project.sln
├── assets
│ ├── NotoSansJP-VariableFont_wght.ttf
│ ├── wallpapers
│ │ └── ...
│ └── ...
├── default_theme.tres
├── export_presets.cfg
├── exports
├── main.tscn
├── main_animation.tres
├── project.godot
└── scripts
├── WindowMinimizer.cs
├── main.gd
├── main_animation_player.gd
├── subtitle.gd
├── utils
│ ├── node_util.gd
│ ├── property_observer.gd
│ ├── property_synchronizer.gd
│ ├── quit_handler.gd
│ ├── signal_connection.gd
│ ├── singleton_node.gd
│ └── static.gd
├── visible_notifier_2d.gd
├── wallpaper
│ ├── DesktopWallpaper.cs
│ ├── wallpaper_changer.gd
│ ├── wallpaper_changer_node.gd
│ └── wallpaper_preloader.gd
└── window_container.gd