2016-11-23 19 views
4

我在學習Unity的第三天,目前正在做roll-a-ball tutorial。我正在嘗試添加一個重新啓動按鈕,將球傳回到開始位置/原點。這一切都很好,但我重新啓動後球會繼續移動,但我希望它保持在一個位置,而不是自己移動。如何在重新啓動它的位置後自行移動球體?

我的意思是,如果我以最大速度向左移動並按'R'重新啓動,那麼它會保持向左移動一段時間,但是我想實現的是球不會保持在我重新啓動它的位置後自行移動(也許它的速度正在減慢,以至於它不明顯,在這種情況下,我希望它的速度更快)。

這是我剛剛試過的「希望」的代碼,但沒有。我認爲我在這裏遇到的問題是,新的axisHorizo​​ntal/axisVertical變量值會再次分配給下一個幀,該值取自Input.GetAxis,從我聽說的這是不可能改變的。

這意味着一個大於0/0/0的MoveForce和AddForce會在下一幀再次激活。

using UnityEngine; 
using System.Collections; 

public class PlayerScript : MonoBehaviour { 

    public float movementSpeed = 7f; 
    private Rigidbody rigidSphere; 

    void Start() { 
     rigidSphere = GetComponent<Rigidbody>(); 
    } 

    void FixedUpdate() { 
     float axisHorizontal = Input.GetAxis("Horizontal"); 
     float axisVertical = Input.GetAxis("Vertical"); 

     Vector3 movementForce = new Vector3(axisHorizontal, 0.0f, axisVertical); 
     rigidSphere.AddForce(movementForce * movementSpeed); 

     if (Input.GetKeyDown(KeyCode.R)) { 
      transform.position = new Vector3(0, 0, 0); 
      rigidSphere.AddForce(0, 0, 0); 
      axisHorizontal = 0; 
      axisVertical = 0; 
     } 
    } 
} 

我試着用搜索引擎上如何改變是從GetAxis獲取的值,但其他人聲稱它是不可能這樣做。所以我真的不知道如何讓它永遠不會永遠移動...

而且我還得到了一個'獎金'的問題,在這兩天,我一直在學習統一,但他們不值得另一個問題,也許如果他們以前已經回答過了(我一直沒有找到任何幫助我的文檔),那麼就給我一個鏈接,告訴我在哪裏可以找到我的問題的答案。

的問題是,如何使球停止一段時間後,移動後,我按下按鈕(W/A/S/d,在輸入經理正/負按鈕默認值)?例如,我只需按下'W'一秒鐘,但球將永遠向前移動,永不停止。

我想要實現的是例如在按下'W'一秒後,幾秒鐘後球完全停止,似乎GetAxis的值永遠不會回到0.我嘗試谷歌關於它,我認爲這與輸入管理器中的Gravity有關 - 我試着改變它,但球仍然會一直運動,我注意到唯一改變的就是球的速度。

如果有人能夠幫助我解決這些問題,我將不勝感激。

+0

我想說的R,計算出球的力量和適用於相反的方向相同(但不要問我怎麼樣)。 –

回答

4

我想添加一個重啓按鈕,將球傳回 開始位置/原點。這一切都很好,但我重新啓動後球會保持移動 ,但我希望它保持在一個位置,而不是自己移動 。

我看到你試圖通過使用rigidSphere.AddForce(0, 0, 0);來解決這個問題。這隻會將0,0,0添加到球正在移動的現有力量。解決方案是將Rigidbody速度設置爲0

更換rigidSphere.AddForce(0, 0, 0);rigidSphere.velocity = Vector3.zero;

即使你做到這一點,Input.GetAxis值增加,達到0之前,隨着時間的推移而降低。所以,在下一幀,由於這個原因,球可能仍然在移動。

要停止此操作,請將Input.GetAxis替換爲Input.GetAxisRaw

Input.GetAxisRaw當鑰匙被釋放時會立即返回0

我想實現的是我,例如按「W」爲第二, 幾秒鐘,球會完全停止後,它只是似乎後 從GetAxis值永遠不會回到0

由於球在滾動,您需要增加球的角度阻力。這將釋放鑰匙後使球停止滾動。角度阻力位於附着在球上的剛體上。如果這還不夠,也增加拖動。

enter image description here

+0

謝謝!我注意到的唯一情況是球會稍微移動一點,因爲會設置一個小的水平/垂直值。 有沒有辦法使球完全無法移動(被凍結)爲0.5秒? –

+0

當然,用'Input.GetAxisRaw'替換'Input.GetAxis'。這應該完全殺死它。讓我知道。 – Programmer

相關問題