我在团结中开始了我的第一场比赛。在这个游戏中我的球员是一个触及一些问号的球。当触发问号时,它必须显示问题和答案。直到这里,每件事都很好。现在我需要根据问题按a或b。如果答案是正确的,它将添加积分。但这是问题所在。 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.minusQuestionScore();
}
else if (Input.GeyKeyDown(KeyCode.B))
{
gameController.addQuestionScore();
}
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 :(得分: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.minusQuestionScore();
}
else if(Input.GeyKeyDown(KeyCode.B))
{
gameController.addQuestionScore();
}
}
}
答案 1 :(得分:1)
您可以使用Coroutine在触发后等待输入。
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.minusQuestionScore();
break;
}
else if (Input.GetKeyDown(KeyCode.B))
{
gameController.addQuestionScore();
break;
}
yield return null;
}
Question.text = "";
Answer.text = "";
yield return null;
}