当CharacterBody2D与StaticBody2D碰撞时,我试图触发打印。我对戈多很陌生,请原谅我
我有3个场景game_level,CharacterBody2D (player),StaticBody2D (item)。在game_level中,我实例化了child Player和Item
我当前将此脚本附加到StaticBody2D (item):
extends StaticBody2D
func _ready():
print("ready")
func _on_StaticBody2D_body_entered(body):
print("Static body collided with: ", body.name)
我试过改变碰撞层&CharacterBody2D和StaticBody2D的掩码如下:
只是撞了一下,但没有打印
CharacterBody2D || StaticBody2D
Collision>Layer = 1 || Collision>Layer = 1
Collision>Mask = 1 || Collision>Mask = 1
刚刚通过但没有打印
CharacterBody2D || StaticBody2D
Collision>Layer = 1 || Collision>Layer = 2
Collision>Mask = 1 || Collision>Mask = 2
只是撞了一下,但没有打印
CharacterBody2D || StaticBody2D
Collision>Layer = 1 || Collision>Layer = 2
Collision>Mask = 1 & 2 || Collision>Mask = 1 & 2
Godot版本:Godot_v4.0.1-stable_win64
在Godot中,Node
具有信号,您可以从编辑器或代码连接这些信号。你需要连接信号使它们工作。
我知道你没有接StaticBody2D
的body_entered
信号。
使用与Godot将生成的名称匹配的方法(在本例中为_on_StaticBody2D_body_entered
)不起作用。
您可以看到Godot是否识别出方法连接了信号,因为它在代码编辑器中的方法声明左侧显示了一个绿色图标。
请参考使用信号
我知道你没有连接StaticBody2D
的body_entered
信号…因为StaticBody2D
没有body_entered
信号。
可以解决这个问题。我已经在其他地方概述了一些方法。这里我就不重复了。
话虽如此,我的建议是不要使用StaticBody2D
,而是使用Area2D
。
如果你需要它是一个StaticBody2D
,那么我建议添加一个子Area2D
到StaticBody2D
,并使用它来检测碰撞(这是我在其他地方提到的选项之一)。
为了完整起见,我还将提到您可以检测CharacterBody2D
遇到的情况。这样的:
for index in get_slide_collision_count():
var collision := get_slide_collision(index)
prints(collision.get_collider())
对于不移动的CharacterBody2D
和StaticBody2D
来说,这应该是足够的,因为如果StaticBody2D
不移动,它就不会撞上CharacterBody2D
(换句话说,碰撞将是CharacterBody2D
运动的结果)。
※:Godot 4中移动平台的推荐方法是使用AnimatableBody2D
,即StaticBody2D
。