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
相关产品推荐
相关产品推荐

