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的侧翼,因此玩家不应该能够垂直移动(当然,下降的时候除外)。我试过了方向=新的Vector2 (directionHori,rb.Velocity.y);//用rb.Velocity替换0
然而,这会造成更奇怪的行为。任何帮助都将不胜感激,我仍然是团结的新手!非常感谢。
发布于 2021-10-21 14:39:36
与其使用需要自己计算最终位置的MovePosition,不如简单地调整velocity
var velocity = rb.velocity;
velocity.x = direction * moveSpeed;
rb.velocity = velocity;这使重力和垂直运动保持不变,Rigidbody2D /物理引擎为您进行计算;)
https://stackoverflow.com/questions/69663933
复制相似问题