Godot中的信号与事件类似,可以通过连接信号来订阅该事件。Godot 中的任何节点都会在发生特定事件时发出信号,例如按下按钮。其他节点可以连接到单个信号并对所选事件做出反应。例如,代表金币的 Area3D 会在玩家的物理实体进入其碰撞形状时发出 body_entered 信号,让你知道玩家收集到了金币。

连接信号

以Area3D节点的碰撞信号为例: GDScript:调用信号的connect函数连接信号, disconnect函数解除连接:

GDSCRIPT
var area3d = get_node("Area3D")
area3d.body_entered.connect(函数)
area3d.body_entered.disconnect(函数)
点击展开查看更多

C#:信号已经被封装成C#的事件,直接使用运算符+=-=即可完成信号的连接和解除:

CS
var area3d = GetNode<Area3D>("Area3D");
area3d.BodyEntered += 函数;
area3d.BodyEntered -= 函数;
点击展开查看更多

注意:用于连接信号的函数的参数要与信号的参数一一对应 如,Area3D的信号 BodyEntered 要求对应函数的参数为

CS
void 函数(Node3D body)
点击展开查看更多

自定义信号

GDScript:信号无参数时可不带括号

GDSCRIPT
signal my_signal
signal my_signal_with_params(参数)
点击展开查看更多

C#:信号命名必须以EventHandler结尾

CS
[Signal]
public delegate void MySingalEventHandler(参数);
点击展开查看更多

发送信号

GDScript:调用信号的emit函数发送信号:

GDSCRIPT
obj.my_signal.emit()
obj.my_signal_with_params.emit(参数)
点击展开查看更多

C#:调用对象的EmitSignal函数发送信号:

CS
obj.EmitSignal(obj.SignalName.MySingal, [参数])
点击展开查看更多

obj.SignalName:当对象中的某个委托被标记特征[Signal]后,自动生成该对象。

版权声明

作者: Chaim

链接: https://chaim.eu.org/posts/godot%E4%BF%A1%E5%8F%B7/

许可证: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键