ずっと気になっていたシグナル。どうやら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つのクラスに複数のシグナルをつけることができる。
・ノードにあるものでシグナルをする。
なんとかわかりそう。あとは何度か実際に試していくだけ