📅  最后修改于: 2023-12-03 15:01:21.146000             🧑  作者: Mango
在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
函数,该函数将触发我们的自定义信号,并在控制台上输出一条消息。
定义和触发自定义信号非常简单,并且有助于在不同节点之间进行通信。使用自定义信号,您可以更轻松地在项目中构建模块化和可重用的组件。