Unity3d 刚体速度破坏了物理统一性

Unity3d 刚体速度破坏了物理统一性,unity3d,physics,velocity,Unity3d,Physics,Velocity,我正在尝试使用rigidbody.velocity移动我的播放器: rigidbod.velocity = new Vector2 (Input.GetAxis ("Horizontal") * maxSpeed, rigidbod.velocity.y); 问题是,这搞乱了我的爆炸代码。角色应该在靠近爆炸时被击退。我知道为什么会这样;如果玩家静止不动,刚体的X速度将返回为0,这意味着任何沿X轴推动玩家的外力都会抵消这一点。因此,当我添加爆炸时,玩家会在几个单位之外切换到他的新位置。这看起来非

我正在尝试使用rigidbody.velocity移动我的播放器:

rigidbod.velocity = new Vector2 (Input.GetAxis ("Horizontal") * maxSpeed, rigidbod.velocity.y);

问题是,这搞乱了我的爆炸代码。角色应该在靠近爆炸时被击退。我知道为什么会这样;如果玩家静止不动,刚体的X速度将返回为0,这意味着任何沿X轴推动玩家的外力都会抵消这一点。因此,当我添加爆炸时,玩家会在几个单位之外切换到他的新位置。这看起来非常不自然和不自然,因为他应该被推回,但他的密码告诉他除非按下一个键否则不要动。我发布这篇文章是想看看是否有任何方法可以重新编写代码,以便在被外力正确推动的同时移动玩家。我听说AddForce有效,但当我使用它时,我的玩家的速度不断提高。他枯萎得太快或太慢。有什么办法可以让它工作吗?我试着在“maxspeed”后面加上rigidbody.velocity.x,希望它能允许外力输入,这是可行的,但它弄乱了动作代码,让他跑得太快了。我似乎无法让爆炸和动作代码同时正常工作。任何帮助都将不胜感激。谢谢。

这正是为什么在Unity文档中他们明确指出:

在大多数情况下,不应直接修改速度,因为这样可以 导致不切实际的行为

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


这就是为什么必须在AddForce中包含*Time.deltaTime。。。任何时候,当你像我说的那样在多个帧上合成它们时,我不确定你是否明白我说的。我在我写的东西中加入了这一点。AddForce的问题是我的播放器的速度会不断增加。玩家没有达到最大速度。因此,如果保持一个方向,玩家会很快发疯。我在我写的文章中说了这一点。我真的很感谢你的帮助,但这不是我真正想要的。无论如何谢谢你@Lolslowstir可以在条件下使用速度。ifvelocity.xVector2 force = new Vector2 (Input.GetAxis ("Horizontal") * maxSpeed, 0f); rigidbody.AddForce(force); //or if in update: rigidbody.AddForce(force * Time.deltaTime);