📌  相关文章
📜  hwo 在 godot 中触发自定义信号 - Go 编程语言 - Go 编程语言(1)

📅  最后修改于: 2023-12-03 15:01:21.146000             🧑  作者: Mango

在Godot中触发自定义信号

在Godot中,可以使用信号来在不同节点之间进行通信。默认情况下,Godot提供了许多内置信号,例如Node的ready()信号。

但是,在某些情况下,您可能需要在自定义节点中定义自己的信号并触发它们。在本教程中,您将学习如何定义和触发自定义信号。

定义自定义信号

定义自定义信号非常简单。首先,在您的自定义节点类中创建一个新的信号:

using Godot;

public class MyCustomNode : Node
{
    [Signal]
    public delegate void MyCustomSignal();

    // ...
}

在这里,我们使用[Signal]属性将MyCustomSignal标记为信号。接下来,您需要定义一个委托以满足信号的命名约定。

现在,您的节点类已经定义了MyCustomSignal信号。请记住,您可以任意数量和类型的参数定义信号。如果您需要更多的参数,请在委托中添加它们。

触发自定义信号

一旦定义了自定义信号,就可以在任何时候触发它们。例如,在您的节点类中的某个成员函数中:

using Godot;

public class MyCustomNode : Node
{
    [Signal]
    public delegate void MyCustomSignal();

    public void TriggerCustomSignal()
    {
        EmitSignal(nameof(MyCustomSignal));
    }
}

这里,我们在TriggerCustomSignal函数中使用EmitSignal函数发出我们定义的信号。值得注意的是,我们在这里使用了nameof运算符来获取MyCustomSignal委托的名称。这将确保我们传递正确的名称给EmitSignal函数。

成功触发自定义信号的示例
using Godot;

public class MyCustomNode : Node
{
    [Signal]
    public delegate void MyCustomSignal();

    public void TriggerCustomSignal()
    {
        EmitSignal(nameof(MyCustomSignal));
    }
}

// else where, eg. another nodes, node groups
var myCustomNode = GetNode<MyCustomNode>("MyCustomNode");
myCustomNode.Connect(nameof(MyCustomNode.MyCustomSignal), this, nameof(MyFunction));
myCustomNode.TriggerCustomSignal();

public void MyFunction()
{
    GD.Print("MyCustomSignal has been triggered.");
}

这是一个成功触发自定义信号的示例。我们首先获取一个带有MyCustomNode节点的引用,并将其上的信号连接到MyFunction函数。然后,我们调用TriggerCustomSignal函数,该函数将触发我们的自定义信号,并在控制台上输出一条消息。

总结

定义和触发自定义信号非常简单,并且有助于在不同节点之间进行通信。使用自定义信号,您可以更轻松地在项目中构建模块化和可重用的组件。