2017-02-15 153 views
-1

我正在製作團結的第一場比賽。在這個遊戲中,我的球員是一個碰到一些問號的球。當問號被觸發時,它必須顯示一個問題和答案。直到這裏,每件事情都很好。現在我需要根據問題按a或b。如果答案是正確的,它會增加點數。但這是問題。 Unity不會等我按下按鍵。在我按下按鈕並且遊戲崩潰之前,Unity會通過代碼。UNITY - 如何讓團結等待,直到我按下我的鍵

void OnTriggerEnter(Collider collider) 
{ 
    if (collider.gameObject.CompareTag("QuestionCube1")) 
    { 
     Question.text = "Which Number is bigger?"; 
     Answer.text = "A.5 B.10"; 
     if (Input.GetKeyDown(KeyCode.A)) 
     { 
      gameController.minusQuestion‌​Score(); 
     } 
     else if (Input.GeyKeyDown(KeyCode.B)) 
     { 
      gameController.addQuestionSc‌​ore(); 
     } 
     Question.text = ""; 
     Answer.text = ""; 
    } 
} 
//Sorry if the code is kinda all over the place I dont know how to pass the code here exactly. The gameController and the UI texts are declared and working 
+0

請確保您發佈了最小的問題代碼,這樣可以更容易地理解和識別問題。 – Vect0rZ

+0

您可以在發佈代碼時編輯原始帖子,在評論部分中它不可讀。不是那麼少,在輸入之後重置Question.text和Answer.text的原因是什麼? (爲了回答你原來的問題,「等待」輸入並不是一個好習慣)。首先,也許沒有必要重新設置文本,或者有非常具體的理由這樣做? – Vect0rZ

+0

重置它們的原因是在移動時不會在我的臉上留下文字。那麼如果這個想法不好,你能給我一個例子,它做我想要的嗎?通過鍵盤迴答問題。我必須完成這個到週六。 –

回答

1

好的,讓我們從註釋部分轉移,並嘗試根據我目前對您的問題的理解進行即興發揮。

你必須考慮的第一件事是以下幾點。

void OnTriggerEnter(Collider collider) 

觸發器ONLY一次,當另一對撞機進入。解決方案? 使用OnTriggerStay。

void OnTriggerStay(Collider collider) 

這將始終檢查對象是否碰撞時的輸入。

接下來要考慮的是重置文本。據我瞭解,當它們不再發生碰撞時應該將其移除,以便可以使用其他方法。 OnTriggerExit,當它們不再發生碰撞時它將運行額外的代碼。

void OnTriggerExit(Collider collider) 
{ 
    if (collider.gameObject.CompareTag("QuestionCube1")) 
    { 
     Question.text = ""; 
     Answer.text=""; 
    } 
} 

所以,總體來說

void OnTriggerEnter(Collider collider) 
{ 
    if (collider.gameObject.CompareTag("QuestionCube1")) 
    { 
     Question.text = "Which Number is bigger?"; 
     Answer.text = "A.5 B.10"; 

     if(Input.GetKeyDown(KeyCode.A)) 
     { 
      gameController.minusQuestion‌​Score(); 
     } 
     else if(Input.GeyKeyDown(KeyCode.B)) 
     { 
      gameController.addQuestionSc‌​ore(); 
     } 
    } 
} 
+0

謝謝你的幫助。 –

1

您可以使用協程等待輸入被觸發後。

void OnTriggerEnter(Collider collider) 
{ 

    if (collider.gameObject.CompareTag("QuestionCube1")) 
    { 
     Question.text = "Which Number is bigger?"; 
     Answer.text = "A.5 B.10"; 
     StartCoroutine(WaitForAnswer()); 
    } 
} 

IEnumerator WaitForAnswer() 
{ 
    for (;;) 
    { 
     if (Input.GetKeyDown(KeyCode.A)) 
     { 
      gameController.minusQuestion‌​Score(); 
      break; 
     } 
     else if (Input.GetKeyDown(KeyCode.B)) 
     { 
      gameController.addQuestionSc‌​ore(); 
      break; 
     } 
     yield return null; 
    } 

    Question.text = ""; 
    Answer.text = ""; 
    yield return null; 
}