如何修复 Godot 中的所有 area2D 函数,使其在启动时不 运行?

How can I fix all my area2D functions in Godot to not run on startup?

好的,我已经使用 Godot 一段时间了,并没有遇到任何问题。但是,在我添加了一个 area2D 来检测玩家并如下所示传送他们之后,我 运行 遇到了问题。每次我开始游戏时,控制台都会显示这两个功能已经 运行,即使起始位置离 area2Ds 很远。此外,因为它们 运行 进入 -> 退出顺序,它会在隧道出口处生成我,而不是地图的起点。

func _on_Tunnel_body_entered(_body):
    print("entered_tunnel")
    global_position.x = 952.5
    global_position.y = 487

func _on_TunnelBack_body_entered(_body):
    print("exited_tunnel")
    global_position.x = 920
    global_position.y = 635

如有任何帮助,我们将不胜感激!

您是偶然实例化玩家角色,将其添加到场景,然后设置其位置(按此顺序)吗?

这是此问题的常见原因。发生的情况是,一旦您将其添加到场景但在您设置其位置之前,它就会与区域发生碰撞。

要解决它,请在将其添加到场景之前设置全局位置。


您可以通过以下任一方式暂时禁用该行为:

  • 暂时更改图层和遮罩以避免碰撞(您可以使用 set_collision_layer_bitset_collision_mask_bit)。
  • 暂时禁用碰撞形状(通过将 disabled 设置为 true。但是,使用 set_deferred 以避免在 Godot 仍在进行物理计算时禁用它)
  • 临时添加碰撞异常(通过调用add_collision_exception_withremove_collision_exception_with)。
  • 有一个标志,您可以检查接收信号的函数来决定它是否应该生效。
  • 连接代码中的信号一次,所以它们事先没有连接。