You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot 3.5.1:如何让Area2D箭头碰撞后附着在移动飞镖靶上?

解决Godot 3.5.1中箭头附着移动飞镖靶的问题

你当前的代码只是停止了箭头的进程,但箭头还是独立节点,不会跟着飞镖靶移动。要实现附着效果,核心是把箭头变成飞镖靶的子节点——子节点会自动继承父节点的位置变换,跟着一起移动。具体修改步骤如下:

核心修改思路

  1. 碰撞触发时,将箭头的全局坐标转换为飞镖靶的本地坐标,避免位置偏移
  2. 把箭头添加为飞镖靶的子节点
  3. 停止箭头自身的运动逻辑,关闭不必要的碰撞

修改后的代码示例

func _on_Arrow_body_entered(body):
    if body.is_in_group("dart_board"):
        # 停止箭头自身的物理更新和进程
        set_physics_process(false)
        set_process(false)
        
        # 可选:关闭箭头的碰撞体,防止后续干扰
        $CollisionShape2D.set_deferred("disabled", true)
        
        # 将箭头的全局位置转换为飞镖靶的本地位置
        var local_position = body.get_global_transform().affine_inverse().xform(global_position)
        position = local_position
        
        # 把箭头转为飞镖靶的子节点,实现跟随
        if get_parent():
            get_parent().remove_child(self)
        body.add_child(self)

关键细节说明

  • 坐标转换:直接添加子节点会使用本地空间坐标,必须把箭头的全局位置转成飞镖靶的本地位置,否则箭头会突然跳到飞镖靶的原点位置。
  • 关闭碰撞体:如果箭头的碰撞体还启用,可能会和飞镖靶或其他物体产生二次碰撞,影响体验,所以建议禁用。
  • 信号确认:确保你已经把Area2D的body_entered信号正确连接到箭头脚本的_on_Arrow_body_entered函数,且飞镖靶确实加入了dart_board组。

内容的提问来源于stack exchange,提问作者allen monzon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:50:29