Area2D 不触发 Godot 中的对象

Ath*_*oth 3 godot

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

func _on_Area2D_area_entered(area):
    get_parent().get_node("Level 1/Area2D/Flag").rotation_degrees += 1
Run Code Online (Sandbox Code Playgroud)

我试图实现的是,玩家游戏对象将查看它是否在旗帜的区域中,如果是,旗帜就会旋转。

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

在此输入图像描述

“玩家”游戏对象是带有包含检测(如果位于二维区域)的脚本的游戏对象。

The*_*aot 6

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

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


您收到错误了吗?

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

get_parent().get_node("Level 1/Area2D/Flag")
Run Code Online (Sandbox Code Playgroud)

如果您希望能够检查,可以使用get_node_or_nullis_instance_valid

由于您没有提到任何错误,我猜该方法没有运行。


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

当另一个人进入时,该"area_entered"信号将触发。但我在你的场景树中只看到一个。另一方面,当a (例如,,)进入时,将触发。无论哪种情况,您都会获得作为方法参数输入的内容。Area2DArea2DArea2D"body_entered"PhysicsBody2DStaticBody2DKinematicBody2DRigidBody2DArea2D

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


并消除一些可能的误解:

  • 当或分别进入时,"area_entered"和触发,而不是它们在其中的每一帧。所以不是旋转动画。"body_entered"Area2DPhysicsBody2DArea2Drotation_degrees += 1
  • 您将收到任何触发信号的通知,而不仅仅是您连接到的对象。您可能需要进一步过滤,例如if body == self:

对于通过搜索到达这里的人,我想链接一个类似的案例:敌人不受子弹影响。还有我对如何设置物理节点的完整解释