刚体速度搞乱物理 UNITY

Rigidbody Velocity Messing Up Physics UNITY

我正在尝试使用 rigidbody.velocity:

来移动我的播放器
rigidbod.velocity = new Vector2 (Input.GetAxis ("Horizontal") * maxSpeed, rigidbod.velocity.y);

问题是,这弄乱了我的爆炸代码。该角色应该在接近爆炸时被击退。我知道为什么会这样;如果玩家静止不动,则刚体的 X 速度将返回为 0,这意味着沿 X 轴推动玩家的任何外力都会抵消这一点。因此,当我添加爆炸时,玩家会切换到几个单位外的新位置。它看起来非常不自然和生涩,因为他应该被推回去,但他的代码告诉他除非按下一个键否则保持静止。我发布这个是为了看看是否有任何方法可以重写这段代码,以便能够在被外力正确推动的同时移动玩家。我听说 AddForce 有用,但是当我使用它时,我的播放器的速度不断增加。他枯萎的方式太快或太慢。关于如何让它工作的任何想法?我试着在上面写着 'maxspeed' 的地方添加 rigidbody.velocity.x,希望它允许外力输入,而且它起作用了,但是它弄乱了移动代码,让他走得太快了。我似乎无法让爆炸和移动代码同时正常工作。任何帮助将不胜感激。谢谢

这正是他们在 Unity 文档中明确指出的原因:

In most cases you should not modify the velocity directly, as this can result in unrealistic behaviour.

与其直接修改速度,不如使用 AddForce(..)

Vector2 force = new Vector2 (Input.GetAxis ("Horizontal") * maxSpeed, 0f);
rigidbody.AddForce(force);

//or if in update:
rigidbody.AddForce(force * Time.deltaTime);