Godot引擎子弹碰撞敌人无检测响应问题求助
Godot子弹与敌人碰撞检测问题解决方案
1. 修复信号类型错误
Area2D之间的碰撞触发的是area_entered信号,而非你代码里用的body_entered(后者用于Area2D和PhysicsBody2D/CharacterBody2D的碰撞)。修改代码如下:
extends Area2D const SPEED = 300 func _physics_process(delta: float) -> void: position.y -= SPEED * delta func _on_area_entered(area: Area2D) -> void: print("destroyed with bullet") area.queue_free() self.queue_free()
2. 确认信号已正确绑定
- 选中子弹的Area2D节点,在检查器面板切换到信号标签
- 找到
area_entered信号,点击「连接」,选择子弹节点自身,确认绑定到_on_area_entered函数
3. 额外检查项
- 确保子弹和敌人的CollisionShape2D都未勾选Disabled,且碰撞形状完全覆盖Sprite/AnimatedSprite的可视范围
- 确认两者的碰撞层和碰撞掩码匹配:子弹的碰撞掩码要包含敌人所在的碰撞层,反之亦然(至少一方的掩码覆盖对方的层)
- 排查是否有其他逻辑提前销毁了子弹或敌人节点
内容的提问来源于stack exchange,提问作者Ben van Looij
相关产品推荐
相关产品推荐

