简介
在开发游戏的过程中,往往会出现这样的情况:
- 玩家受到伤害,需要让血量条发生变化
- 动画播放结束了,需要用代码控制播放下一个动画
- 要设置机关,当玩家触碰后激活某处机关
我们可能会有以下思路:
- 先获得到需要触发变化的节点,然后调用节点上的函数,例如第一种情况在玩家脚本中:
get_node("hp_bar").update_value(hp_value) - 先通知父级节点,然后再想办法通知到对应的节点处理,例如第一种情况在玩家脚本中:
get_parent().do_something(hp_value) - 先把自己存放再需要变化的节点的属性里,然后每帧根据玩家的属性,例如第一种情况在玩家脚本中:
hp_bar.player = self,然后在血量的process函数中update_value(player.hp_value)
很容易发现以上代码中,传输数据是一件很不方便的事情。尤其是我们不可能将所有代码全部放在一个庞大的game.tscn场景文件中,这使得节点之间的交互更是一件复杂的事情。
那有什么办法可以简化这种操作呢?或者说,如何将一个事件,和处理这个事件的函数解绑呢?
答案是信号signal。
2025/10/17大约 9 分钟
