Area2D 不触发 Godot 中的对象

Area2D Not Triggering Object in Godot

这是我的代码:(只是让你知道我是一个初学者,我这周才开始,尽管我确实了解其他语言和游戏引擎)

func _on_Area2D_area_entered(area):
    get_parent().get_node("Level 1/Area2D/Flag").rotation_degrees += 1

我试图完成的是 Player GameObject 将查看它是否在旗帜区域,如果是,旗帜将旋转。

我不确定问题出在哪里。我认为它可能在第二行。如果设置错误,我在下面提供了屏幕截图。我已经查看了关于同一主题的其他密切问题,但他们没有回答我的问题。

“玩家”游戏对象是包含检测脚本的对象,如果它在 area2D 中。

如果您想检查 Area2D 在运行时是否正确定位,请启用调试 -> 可见碰撞形状。

如果要检查 _on_Area2D_area_entered 是否为 运行,请添加断点(或使用打印)。


你有没有遇到错误?

如果那里没有 Node,此表达式将导致运行时错误:

get_parent().get_node("Level 1/Area2D/Flag")

如果你想能够检查,你可以使用get_node_or_null and is_instance_valid

既然你没有提到任何错误,我猜这个方法不是运行。


如果该方法不是 运行,最可能的罪魁祸首是 - 我猜给出了方法的名称 - 你连接了 "area_entered" 信号但打算连接 "body_entered"信号。

"area_entered" 信号将在另一个 Area2D 进入 Area2D 时触发。但我在你的场景树中只看到一个 Area2D。另一方面,"body_entered" 将在 PhysicsBody2D(例如 StaticBody2DKinematicBody2DRigidBody2D)进入 Area2D 时触发。在任何一种情况下,您都会得到作为方法参数输入的内容。

Area2D 可能无法检测到您想要的内容的其他原因包括 collision_layercollision_mask 没有交集以及 monitoring 被禁用。


并消除一些可能的误解:

  • "area_entered""body_entered"Area2DPhysicsBody2D分别进入Area2D时触发,不是每帧都在里面。 所以rotation_degrees += 1不是旋转动画
  • 您将收到任何触发信号的通知,而不仅仅是您连接到的对象。您可能需要进一步过滤,例如if body == self:.