2017-02-15 130 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; 
} 
相关问题