0

在我的游戏中,我有一个吃豆人风格的竞技场。边缘对撞机放置在每条线上。现在,对于我的播放器的移动(WASD 风格),我最初使用了 transform.Translate。这给了我希望我的球员拥有的最好的流畅运动。你们大多数人都知道,这使得边缘碰撞器无效,因为玩家只会在边缘上变换它的位置。为了解决这个问题,我使用 rb.AddForce(new Vector2(Input.GetAxis("Horizo​​ntal") * speed, Input.GetAxis("Vertical") * speed); 代替,但我真的不喜欢玩家如何移动,因为即使您松开 WSAD 键,它仍然会移动,并且会发出更多的加速移动而不是计算移动。

有谁知道解决这个问题的方法?流体 WASD 运动,如 transform.Translate,但不通过边缘对撞机。

我很感激!

4

1 回答 1

0

您的对象仍然移动的原因是保持在刚体上的速度。我的建议是直接改变速度。此外,请务必将您的代码放在 FixedUpdate 中。

Vector2 inputVector = new Vector2(Input.GetAxis("Vertical", Input.GetAxis("Horizontal"));
inputVector = inputVector.normalized; // Makes the Length of the vector = 1 even if pressed diagonally, if you don't want something like this, remove it
rb.velocity = inputVector * speed;

有关更多信息,请务必观看此视频:https ://unity3d.com/earn/tutorials/projects/space-shooter/moving-the-player 更多高级版本请阅读:http ://wiki.unity3d.com/ index.php?title=刚体FPSWalker

于 2017-04-27T06:05:30.347 回答