0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Godot 4x】ボタンのクリックをイベントハンドラで紐づける

Posted at

はじめに

シグナルを使うよりこちらのほうがシンプルにコーディングできそうです。

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 公式のチュートリアルではシグナルを使うよう紹介されていたため、今回のイベントハンドラに気づくのに時間がかかった次第です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?