Godot中的信号与事件类似,可以通过连接信号来订阅该事件。Godot 中的任何节点都会在发生特定事件时发出信号,例如按下按钮。其他节点可以连接到单个信号并对所选事件做出反应。例如,代表金币的 Area3D 会在玩家的物理实体进入其碰撞形状时发出 body_entered 信号,让你知道玩家收集到了金币。
连接信号
以Area3D节点的碰撞信号为例:
GDScript:调用信号的connect函数连接信号, disconnect函数解除连接:
var area3d = get_node("Area3D")
area3d.body_entered.connect(函数)
area3d.body_entered.disconnect(函数)C#:信号已经被封装成C#的事件,直接使用运算符+=、-=即可完成信号的连接和解除:
var area3d = GetNode<Area3D>("Area3D");
area3d.BodyEntered += 函数;
area3d.BodyEntered -= 函数;注意:用于连接信号的函数的参数要与信号的参数一一对应
如,Area3D的信号 BodyEntered 要求对应函数的参数为
void 函数(Node3D body)自定义信号
GDScript:信号无参数时可不带括号
signal my_signal
signal my_signal_with_params(参数)C#:信号命名必须以EventHandler结尾
[Signal]
public delegate void MySingalEventHandler(参数);发送信号
GDScript:调用信号的emit函数发送信号:
obj.my_signal.emit()
obj.my_signal_with_params.emit(参数)C#:调用对象的EmitSignal函数发送信号:
obj.EmitSignal(obj.SignalName.MySingal, [参数])obj.SignalName:当对象中的某个委托被标记特征[Signal]后,自动生成该对象。