2015-10-04 62 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