概念页
信号与节点通信
Signals
信号是 Godot 内建的委托/观察者机制:节点在特定事件发生时发出消息,其他节点连接后回调,无需互相硬引用,从而降低耦合。
原理
- 信号是一等类型(Godot 4+):可作参数传递,优于纯字符串名,利于补全与类型检查。
- 典型流:生命变化 → 角色
emit→ HUD 血条连接并刷新。 - 连接方式:编辑器连线,或代码
signal.connect(callable);可一次性、可延迟。
应用
- UI 按钮、
Area2D.body_entered、动画结束、自定义health_changed(new_hp)。 - 跨场景通信:子场景对外暴露信号,父场景连接;避免子节点
get_node("../../HUD")硬路径。
取舍
- 适合:一对多通知、UI 与玩法解耦、可热插拔模块。
- 慎用:每帧高频状态同步(更宜直接读属性或用组查询);跨整棵树的「全局事件总线」若无纪律会变成隐式依赖迷宫。
- 与 观察者模式、UE 多播委托同一家族;Godot 把模式做成引擎一等公民。
参见
出处
相关页面
游戏开发 · Godot节点与场景Nodes & ScenesGodot 把游戏抽象成「场景树」:节点是最小积木,场景是可复用的节点树蓝图;场景可嵌套实例化,同时扮演其他引擎中 Prefab 与关卡的角色。游戏开发观察者模式Observer Pattern观察者模式 (Observer Pattern) 让一段代码宣布“发生了某件事”,而不必关心谁会收到通知:主体 (Subject) 维护一个观察者列表,在事件发生时逐个同步调用它们。它适合连接彼此几乎无关的子系统(例如物理与成就),但要注意同步阻塞、观察者的注销,以及运行时才能确定的通信关系难以推理。游戏开发事件队列Event Queue事件队列 (Event Queue) 用一个先进先出队列,把“发送消息或事件”和“处理它”在时间上解耦:发送方入队后立即返回,接收方在自己方便的时候再取出处理。它比观察者和命令模式多做的一件事是时间上的解耦,适合“推”与“拉”两端节奏不同的场合(例如音频请求),代价是全局可见、世界状态可能已经改变,以及可能出现隐蔽的反馈回环。游戏开发 · UE5委托与 Tick 机制Delegates & TickUE 有两种驱动游戏逻辑的方式:事件驱动——委托 (Delegate) 在某事发生时回调绑定的函数;轮询驱动——Tick 每帧(或按最小间隔)调用 Actor/组件的更新函数,并按 Tick 组 (Tick Group) 与物理模拟排序。官方建议能用定时器、委托就不用 Tick,必须 Tick 时用 Tick 组和 Tick 依赖保证顺序,避免“差一帧”问题。游戏开发 · GodotGodot 最佳实践与场景组织Godot Best Practices官方最佳实践系列从真实问题出发,强调 OOP 原则在节点/场景上的落地:场景声明组合、脚本声明行为;Autoload 慎用;别把一切都做成 Node。