godot architecture
シーンのルートノードにシーンコントロール用のコントローラースクリプトをアタッチする
シーン単位で独立して動かせるようにする
外部への依存はDIで外部から注入する
DI活用
シーンコントローラースクリプトで外部へのシグナルは管理と発信
シーンコントローラーに外部から内部の要素を制御するためのパブリックメソッドを持たせる
シーンコントローラーに外部からの制御をするためのパブリックフィールドを持たせる
そのフィールドの変化に応じて動作するようにすると便利そう。
observer ptternっぽくしてもよいかも
シーンの継承は最大一つ
サブシーンの子要素には直接編集可能にしない
シーンのカプセル化をきちんとしろ
機能のあるコントローラースクリプトがない限り、1つ2つしかノードがないようなシーンはつくらない
シーンが無駄に複雑になるので
以下のような順でスクリプトは記述するとよい
code:Order
01. @tool
02. class_name (PascalCase)
03. extends
04. # docstring
05. signals (snake_case)
06. enums (PascalCase, members are CONSTANT_CASE)
07. constants (CONSTANT_CASE)
08. @export variables (snake_case)
09. public variables (non-underscore-prefixed snake_case)
10. private variables (underscore-prefixed _snake_case)
11. @onready variables (snake_case)
12. optional built-in virtual _init method
13. optional built-in virtual _enter_tree() method
14. built-in virtual _ready method
15. remaining built-in virtual methods (underscore-prefixed _snake_case)
16. public methods (non-underscore-prefixed snake_case)
17. private methods (underscore-prefixed _snake_case)
18. subclasses (PascalCase)
.resより.tresのほうがgitとの相性がいい
https://www.youtube.com/watch?v=4az0VX9ApcA
一定規模以上でのGodot projectのdirectory 構成について
基本はシーンごとに関連リソースをすべてまとめる
共通のものであったり、特別どこかのシーンに紐づかない場合ははAssets配下におく
ファイルの種類でわけない
Assets
Font、その他の音等
Common
他のゲームにも使いまわせるようなロジック、UI群
Config
設定群
Entities
プレイヤー、NPC、モンスター、スキルシステム。だいたいのゲーム以内要素はここに納められる
Localization
Stages
マップ
タイルセットリソースはここで管理
Utilities
ゲームマネージャーやシーン遷移等ゲーム内要素機能ではないが、ゲーム固有で使いまわせないヘルパーメソッド群
auto loadで使い割れがちなxx Manager類はここらへん。