首页 > 解决方案 > Rigidbody2D:如何防止 Y 轴被 0 覆盖?

问题描述

public void MoveCharacter(float directionHori) //either -1 or 1
{      
    direction = new Vector2 (directionHori, 0); //new vector2 using passed x value (1 or -1). //BUG - passing in 0 as Y axis overrides gravity while player is moving.

    rb.MovePosition(rb.position + direction * moveSpeed * Time.fixedDeltaTime); //apply movement 
}

上面是我的 MoveCharacter 方法,当它被调用时,Y 轴被 0 覆盖,因此重力被禁用,允许玩家在他应该跌倒时飞行。这是一个 2D 横向卷轴,因此玩家不应该能够垂直移动(当然,跌落时除外)。我试过 direction = new Vector2 (directionHori, rb.Velocity.y); //用rb.Velocity替换0

然而,这会产生更奇怪的行为。任何帮助将不胜感激,我还是 Unity 的新手!非常感谢。

标签: c#unity3dvelocitygravity

解决方案


而不是使用MovePosition你需要自己计算最终位置的地方,你可以简单地调整velocity类似

var velocity = rb.velocity;
velocity.x = direction * moveSpeed;
rb.velocity = velocity;

这样可以保持重力和垂直运动不变,并且Rigidbody2D/物理引擎会为您进行计算;)


推荐阅读