更新中的函数只调用一次

时间:2017-02-26 18:27:21

标签: c# unity3d unity5

游戏应该每获得200分就冻结,然后会出现一个测验。在回答之后,游戏应该恢复。 在我的代码中它只发生一次。将freezescore增加到400以便下一个测验出现后,游戏不会冻结。

public static int freezescore = 200;

void Update () 
{
    if (score == freezescore)
    {
        freeze();
        Quiz();
        Debug.Log("" + freezescore);
    }
}

public bool freeze()
{
    Time.timeScale = 0.1f;
    return true;
}

public void Quiz()
{
    if (freeze() == true)
    {
        if (canvasquiz != null)
        {
            canvasquiz.SetActive(true);
        }

    }
}

//Attached this method to the button
public void Resume()
{
    if (canvasquiz != null)
    {
        canvasquiz.SetActive(false);
        Time.timeScale = 1.0f;
    }

    score = score + 1;
    freezescore = freezescore + 200;
}

1 个答案:

答案 0 :(得分:1)

老实说,我会稍微改写一下:

private int freezeScore;
private int score;

private void Update()
{
    if (score >= freezeScore)
    {
        StartQuiz();
    }
}

public void StartQuiz()
{
    Time.timeScale= 0;
    if (canvasquiz != null)
    {
        canvasquiz.SetActive(true);
    }
}

//Attatch to button
public void EndQuiz()
{
    if (canvasquiz != null)
    {
        canvasquiz.SetActive(false);
        Time.timeScale = 1.0f;
    }
    score += 1;

    freezeScore += 200;
}

这是未经测试的,因为我没有您的所有代码,因此您可能需要稍微修改一下,但我希望您明白这一点。

有些原因导致事情可能没有按照你的方式运作:

if (score == freezescore)函数中的

Update意味着如果玩家在任何时间获得超过一个点,那么他们可能会错过200,400或600,依此类推,这意味着{{1}不会触发。

另外,我不知道为什么Quiz函数返回bool并在它总是返回true时被检查。 freeze中的if (freeze() == true)语句始终为真。您也可以在Quiz函数中设置时间刻度。