UNITY - 如何让团结等到我按下i键

时间:2017-02-15 09:36:07

标签: unity3d

我在团结中开始了我的第一场比赛。在这个游戏中我的球员是一个触及一些问号的球。当触发问号时,它必须显示问题和答案。直到这里,每件事都很好。现在我需要根据问题按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.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

2 个答案:

答案 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();
        } 
    }
}

答案 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.minusQuestion‌​Score();
            break;
        }
        else if (Input.GetKeyDown(KeyCode.B))
        {
            gameController.addQuestionSc‌​ore();
            break;
        }
        yield return null;
    }

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