2016-09-06 34 views
2

我已經遵循了「Roll-A-Ball」的Unity教程,並添加了一些擴展。球現在可以跳起來,但是每次跳起都會跳得太多次;當我按下SPACE時,我只想要一次球。現在我可以在SPACE上按3次,它會越來越高。如何解決雙跳

if (Input.GetKeyDown(KeyCode.Space)) 
     { 
      Vector3 jump = new Vector3(0.0f, 150.0f, 0.0f); 

      rb.AddForce(jump); 
     } 

編輯:

試圖改變的代碼一點點,但現在我只能跳一次(第一次)

private void textBox_KeyDown(object sender, KeyEventArgs e) 
{ 
     if (Input.GetKeyDown(KeyCode.Space) && jump.y <= 0.0f) 
    { 
     jump.Set(0.0f, 150f, 0.0f); 
     rb.AddForce(jump); 

    } 
    } 
+0

你會得到這個結果,因爲每當你按下空間時你都會給球增加額外的力量。 3按== 3 *方向的力量。監測球的向上速度,只有在滿足特定參數時才加力。即如果向上速度<= 0,那麼你可以跳!別的,你不能。 – Zze

+0

試圖做到這一點,但它不起作用:( –

+0

@adadudu奇怪的是,一旦Z速度在空中遇到'0.0f',這意味着在軌跡中間 - 也就是說,除非我錯了,我對UnityScript一無所知。只要按下空格鍵就可以嘗試記錄速度,以確保您沒有丟失任何東西:^) – Gustavo6046

回答

0

我找到了解決方案。解決方法是添加OnCollisionEnter,您可以在其中處理玩家與地面碰撞時會發生的情況。此外,我還添加了一個計數器,當玩家跳躍時將其設置爲0,當他與地面碰撞時再次設置爲0。

計數器:

if (Input.GetKeyDown(KeyCode.Space)) 
    { 
     if (JumpCount < 1) 
     { 
      Vector3 jump = new Vector3(0.0f, 250.0f, 0.0f); 
      rb.AddForce(jump); 
      JumpCount++; 
     } 
    } 

計數器設置爲0瀏覽:

void OnCollisionEnter(Collision other) 
{ 
    JumpCount = 0; 
} 
4

這能有點難以遵循(因爲它不是一步一步的教程,而是一個方案)。

您必須檢查球何時到達樓層,檢查在第一次按下後速度是否爲0或更高。一旦它確實,然後設置一些布爾(這裏命名爲CanJump)到true(或任何你的語言定義爲真)。

還有一些更多的檢查工作;一旦CanJump被設置爲true(因爲你的速度現在爲>= 0),請將一個名爲NumJumps的int變量也設置爲0。通過這種方式,您可以在兩次跳躍後將CanJump設置爲假,以防止球跳躍。

請注意我對Unity 3D一無所知,但我有一些3D遊戲(如虛幻引擎1,因此UT99改裝)的經驗。

+0

這是一個很好的答案,可以與Unity一起使用。你可以做的另一個檢查是'onCollisionEnter'與'floor',將canJump設置爲true,然後'onCollisionrExit'' canJump'將變爲false。 – Zze

0

我發現,最好的解決辦法是使用光線投射。

bool isOnGround = Physics.Raycast(transform.position, -Vector3.up, 1.875f); 

將1.875f替換爲角色起源與地面之間的距離,再加上一點額外。然後,您可以在確定是否應該跳轉時檢查isOnGround