2015-10-04 111 views
0

我试图用rigidbody.velocity动我的球员:刚体速度搞乱了物理UNITY

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

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

回答

0

这也正是为什么在统一的文档,他们明确说明:

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

,而不是直接修改速度,你应该使用AddForce(..)

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

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

那究竟为什么你必须包括在'AddForce(...)的'*'Time.deltaTime'随时你正在复合他们在多个框架,因为我说 – maksymiuk

+0

我不知道你是否得到我说的话。我在写的内容中确认了这一点。 AddForce的问题是我的播放器速度会不断增加。玩家没有达到最大速度。因此,如果持有单一方向,玩家就会变得疯狂。我在那篇文章中说过。我非常感谢你尝试提供帮助,但这不是我正在寻找的。不管怎么说,还是要谢谢你! @LOLslowSTir –

+0

您可以在条件下使用速度。 'if(velocity.x Kamalen