godot
以下godot4環境前提
参考
community forum
plugin
https://www.youtube.com/watch?v=-FQNPCB7e3s
https://www.youtube.com/watch?v=bKNmsae5zXk&ab_channel=DevWorm
https://www.youtube.com/watch?v=IN6Z3C7V_Uk
Effekseer
jolt
godotの標準物理エンジンとは別の物理エンジン
大量の物理オブジェクトの性能向上とかあるが、一部制約も増えるので注意
Dialogic 2.
ダイアログを作成する
git ignore
*.tmpもいらんのではと思い始めている
project生成時にdefaultでgitignore生成はされている
shortcut
project style
フォルダ名とファイル名はsnake_case
windowsが小文字と大文字をファイル名として区別できなかったため
Node名はPascalCase
thried party resourceはaddons/ にいれる
フォルダ構成はシーンの近いアセットでグループ化するとよい
code:=example
/project.godot
/docs/.gdignore # See "Ignoring specific folders" below
/docs/learning.html
/models/town/house/house.dae
/models/town/house/window.png
/models/town/house/door.png
/characters/player/cubio.dae
/characters/player/cubio.png
/characters/enemies/goblin/goblin.dae
/characters/enemies/goblin/goblin.png
/characters/npcs/suzanne/suzanne.dae
/characters/npcs/suzanne/suzanne.png
/levels/riverdale/riverdale.scn
2D 解像度
Pixel art gameなら 640 x 360がおすすめ
昨今のスマホが16:9が主流
タブレットだと4:3が主流
整数倍で1280×720, 1920×1080, 2560×1440, 3840×2160への黒縁なし対応可能
project settings 一般 -> 表示 -> Windows で設定。
サイズ
ストレッチ mode ViewPort
サブピクセルでの動作、回転も認めるならcanvas_itemsもOK
モバイルでもcanvas_items
ストレッチ scacle mode interger
particl explosion
particle処理はhtml5出力だと妙に重かった
https://www.youtube.com/watch?v=SqLVJxl7bNw&ab_channel=16BitDev
ProgressBarの罠
以下のようなプログレスバーのvalueを時間ごとに減らすみ処理でハマった
code:godot4 gdscript
func _process(delta: float)
$TextureProgressBar.value -= delta
これ実際はvalueはいくら時間がたっても値の変化が起こらない
理由はTextureProgressBar.valueは値を代入した際に四捨五入して整数になるから
勝手に暗黙で四捨五入されるのでマジで困る
TextureProgressBar.valueの型自体floatなので何がしたいのかよくわからない
progress barの%表記を整数値で出力したいからとかそんなところか?
凡その環境でdeltaはかなり小さい少数になるので、その値で加減算しても四捨五入されると値は一切変わらない
対応としてはmax_value含めてすべて1000倍とかして大きな数に変換するとよい
プログレスバーはあくまで比率が大事なので
3.5とかの時代では上記の書き方で問題なかったようなので4系からの仕様変更か?
pose実装
直接_process()でゲーム本編の挙動を取らせるよりは別の関数として外だししたほうがポーズ機能の実装にはよさそう。
メニューやバックグラウンドの処理はとめずにゲーム本編だけ止めるとかできるようになるので
pose modeをノードごとに適切に設定するのもよい
Export
godotではexportするにはexportのテンプレートが必要
テンプレートはエディター上でそれぞれのバージョンに見合ったものをダウンロードできる
ダウンロードごとにproject -> exportすればよい
itch.ioならexportされてfolderをzip圧縮したものをアップロード
html fileの名前はindex.htmlにすること
標準的でサポートしていないファイルをリソースとして利用しているなら対応が必要
project -> export -> export path のresource tabのexport filsterに対応するファイルの拡張を追加
*.txt, *.json等
itch.ioへのHTML5 uploadだと cross origin isolation対応が必要
shared array bufferにチェックを入れればよい。
https://www.youtube.com/watch?v=r8KFRLd3Tbo&ab_channel=BrettMakesGames
github action連携
自動export
export_presets.cfgを読んでビルドするので必ずrepoに含める必要あり
一回手元でビルドしたときのファイルを使いまわせばいい
buildで利用するheadless版のdownload urlは手元のgodot versionと合わせること
monoのgodotだとWEB出力には対応していないので注意
export & itch.io upload
とりあえずuploadするのに便利そう
NTFSの大文字小文字問題
windowsのNTFSは大文字小文字を区別しない
命名時に統一すればよいが、油断すると混ざる。
WSL自体は区別可能だがNTFSの領域をいじるときは区別できない
区別できるようにしておいたほうがよい
Ogg Loop
Oggにループポイントを追加可能。
Webアプリなのが便利
godotだと結局秒単位でのoffset設定するしかないが
multi language
翻訳をする前の開発段階でのローカライズまでにらんだ方法について
gettext形式とCSV形式による二通りのやり方が用意されている
CSVはただのkey,valueでシンプル
gettextは一般的な手法だがCSVより複雑
複数行の翻訳がある場合等、ただの単語置き換えですまないならgettextのほうがよさげ
ファイルもロケールごとに分かれるので管理しやすい
CSVの場合
keyをtr(key),tr_n(key)でその時の言語設定に応じた内容がゲーム内で置換
placeholderにも対応
contextの概念あり
Closeという単語は近いと閉めるの意味があり、同じCloseでも言語によっては翻訳語を変える必要がある
この時にContextも一緒にtr("Close", "Actions")のように指定することで適切な単語に翻訳できる
pseudolocalizationを有効化すると翻訳時に文字がスペース収まるかどうか確認しやすくなる
gettextの場合
pybabelらpotファイルを生成するとよいのか
python3-babelがある
ソースコードにキーを埋め込むと検出してpotファイルにキーを追加してくれる
gettext packageを事前に導入しておくこと
godot側でPOTの生成が可能
msginitを使うらしい
HTML5 exportする際のサーバー設定について
GDscript用のlint, formatterがある
Debug
CLI
winならscoopというツールでCLI toolをinstallできる
ただこのgodot4.0なのでちょい古くて使えない
3Dview
カメラ旋回
mouse middle button + mouse move
カメラパン
mouse middle buttone + shift + mousemove
環境光やdirectional lightとかのノードを設定すること
DirecitnalLight
WorldEnviroment
Backgrould: Sky
Sky propertyでSky resourceを追加
Sky Material でProceduralSkyMaterialを追加
ProceduralSkyMaterialをいじると空の色とか変えられるよ
SSRを有効化すると金属面での反射の移り込みも描画される
3d modelはglbファイルをインポートしてresファイルとして変換する必要がある
addon
godot-statecharts. Finite State Machine
Behavior Tree
Logger
命名規則による特殊なimport
ファイル名に特定のsuffixをいれることで、import時に特殊な読み込み方をする
LOD(Level of Detail)
Window Size
debug
logを別ウインドウに出す
godot 躓いたところ