Godot4.3 C# | シグナルをGeminiに習った日

ずっと気になっていたシグナル。どうやらunirxに近いものを感じた。

ボタンを押したりする時に必要になりそうなので、とりあえず腰を据えて学んでみた。

とはいえ1時間ぐらいかな。

少しでも気になったところをAIに聞き倒して理解を深めた。

一回覚えたらずっと使えるというのが良いところ。


using Godot;

public partial class MyButton_1 : Button
{
    // シグナルの定義
    [Signal]
    public delegate void button_testEventHandler();

    public override void _Ready()
    {
        // ボタンが押されたときの処理
        Pressed += OnButtonPressed; // Godot組み込みのPressedシグナルに接続
    }

    private void OnButtonPressed()
    {
        // カスタムシグナルを発行
     //EmitSignalを呼び出す事に通知するので、何回でも発行して良い。(個人的メモ)

        EmitSignal(nameof(button_test)); // シグナルの名前を変更
    }
}

using Godot;

public partial class Main1 : Node
{
    private Label _myLabel;
    private MyButton_1 _myButton;

    public override void _Ready()
    {
        // ノードの取得
        _myLabel = GetNode<Label>("myLabel");
        _myButton = GetNode<MyButton_1>("koko");

        if (_myLabel == null || _myButton == null)
        {
            GD.PrintErr("Label or Button not found!");
            return;
        }

        // シグナルの接続
		_myButton.button_test += OnMyButtonPressed;
    }

    private void OnMyButtonPressed()
    {
        // ラベルのテキストを変更
        _myLabel.Text = "Button Pressaaaaed!";
    }
}

//受信型は送信側のことを考えなくて良い。
//どのクラスからでもシグナルに接続すると受信できる。

学んだこと

・コードのみで実装可能

・シグナル名は変更できない (Pressedなど)

・xxx_xxxxEventHandlerを必ずつける必要がある
(button_testEventHandler)

・1つのクラスに複数のシグナルをつけることができる。

・ノードにあるものでシグナルをする。

なんとかわかりそう。あとは何度か実際に試していくだけ