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

Godot Python中多RigidBody2D使用move_and_slide的移动冲突问题求助

问题解决:Godot Python中RigidBody2D速度互相干扰的问题

核心原因

你遇到的问题大概率是速度变量作用域错误,或者脚本挂载对象混乱,导致所有RigidBody2D共享了同一个速度值。

分步解决

  • 确保速度是节点局部变量
    不要在脚本全局区域(类定义外)定义velocity,必须把它作为每个节点实例的属性。比如玩家和球的脚本里,都用self.velocity来存储自身的速度,绝对不能用全局共享的变量。

  • 严格区分脚本挂载对象
    玩家节点只挂载玩家控制脚本,球节点只挂载随机移动脚本,不要重复挂载或挂错节点。两个脚本都要继承RigidBody2D,但各自只负责对应节点的逻辑。

  • 正确的代码示例
    玩家控制脚本:

    extends RigidBody2D
    
    func _physics_process(delta):
        # 只处理玩家的输入移动
        var input_y = Input.get_axis("ui_up", "ui_down")
        self.velocity = Vector2(0, input_y * 200)
        move_and_slide(self.velocity)
    

    球的随机移动脚本:

    extends RigidBody2D
    
    func _ready():
        # 初始化球的随机方向速度
        self.velocity = Vector2(rand_range(-100, 100), rand_range(-100, 100)).normalized() * 150
    
    func _physics_process(delta):
        move_and_slide(self.velocity)
    
  • 额外排查点

    • 检查有没有用get_nodes_in_group这类方法批量修改所有刚体速度,如果有,给玩家和球设置不同的分组,只操作对应组的节点。
    • 确认信号连接没有错误,比如不要把球的速度更新信号连到玩家节点上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:48:32