You need to enable JavaScript to run this app. Rigidbody2D.MovePosition引发重力等物理效果卡顿该如何修复
优惠活动
大模型
产品
解决方案
定价
更多

Rigidbody2D.MovePosition引发重力等物理效果卡顿该如何修复

解答

问题根源

你代码中使用Rigidbody2D.MovePosition直接强制修改物体位置,且传入的位移仅包含水平方向输入偏移,完全覆盖了物理引擎计算的重力下落位移,因此会出现物体下落速度远低于正常水平的问题。同时直接修改刚体位置会打断物理引擎的连续运动模拟,也容易引发卡顿、穿模等异常表现。

修复方案

不要直接操作刚体位置,改为修改刚体的水平速度,保留物理引擎对垂直方向重力、碰撞的原生计算即可,修改后的代码如下:

public class PlayerMovement : MonoBehaviour
{
    Rigidbody2D rb;
    float horizontalInput;

    public float movementSpeed = 10f;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        // 仅在Update中采集输入,不涉及物理操作
        horizontalInput = Input.GetAxisRaw("Horizontal");
    }

    void FixedUpdate()
    {
        // 仅修改水平方向速度,保留刚体原有的垂直方向重力计算结果
        rb.velocity = new Vector2(horizontalInput * movementSpeed, rb.velocity.y);
    }
}

如果确实有必须使用MovePosition实现移动的特殊场景,需要在计算位移时额外加上物理引擎本帧计算出的垂直方向位移,该方法会增加额外计算量,且容易引发其他物理异常,不推荐使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 15:24:03