はじめに
シグナルを使うよりこちらのほうがシンプルにコーディングできそうです。
partial class MyScene : CanvasLayer
{
public override void _Ready()
{
this.GetNode<Button>("MyButton").Pressed += () =>
{
// Do Work
};
}
}
型ごとのイベントの探し方
- VSCode のインテリセンスを使う
-
Button.
まで入力するとその型のメンバー候補が表示されるので、よさそうなイベントを選びます - フィールド・プロパティ・メソッドが大量に表示されるため見つけにくいかもしれません
- 基底クラスのイベントなのかわかりづらいかもしれません
-
- Godot エディタからイベントを見つける(Godot エディタ右側のインスペクター・ノード・履歴のタブ)
- ノード -> シグナル -> (イベントの一覧が表示される)
- 型ごとにイベントが表示されるため見やすいです
シグナルよりイベントを優先する利点
- C# スクリプト側でイベント登録を完結できる
- イベントを変更したときに
.tscn
側の変更が不要でファイル差分が出ません。.tscn
ファイルにデザイン部分だけを集約できます(ロジック部分を持たない)
- イベントを変更したときに
- 「メソッドにシグナルを接続」の手間の省略
- Godot エディタ -> VSCode の行ったり来たりの回数を減らせます。アクティブウィンドウの変更は結構面倒くさく、これの恩恵が大きいです
- Godot エディタが標準で用意するシグナル用メソッドの名前が
_on_do_work_button_button_up
のようなスネークケースになっているため、それを都度手直しする作業を省略できます。メソッドを自動で追加する位置もクラスの外だったり挙動が変なので、それを回避するのも兼ねます
おわりに
Godot は比較的新しいフレームワークなのでドキュメントが少なく、特に C# スクリプトのドキュメントをあまり見かけないので、今回は備忘録的な位置づけです。
Godot 公式のチュートリアルではシグナルを使うよう紹介されていたため、今回のイベントハンドラに気づくのに時間がかかった次第です。