在方法中分配布尔值不起作用

时间:2019-03-04 11:33:38

标签: c# unity3d methods boolean

我制作了一款小型的街机风格游戏,其中的bool变量会跟踪游戏是否结束(gameOver)。

private bool gameOver;

当障碍物碰到玩家时,将执行以下方法:

public void OnCollisionEnter2D(Collision2D other)
{
    //GameOver
    gameOver = true;
}

仅当gameOver的值等于false时,下一个方法才应增加得分。

private void OnTriggerEnter2D(Collider2D other)
{
    if (!gameOver)
    {
        if (int.Parse(scoreText.text) == 0)
        {
            scoreText.text = "1";
        }
        else if (int.Parse(scoreText.text) > 0)
        {
            int oldNumber = int.Parse(scoreText.text);
            int newNumber = oldNumber + 1;
            scoreText.text = newNumber.ToString();
        }
    }
    Destroy(gameObject);
}

但是当游戏实际上是“输了”时,分数保持增加。 我在不同的时间记录了gameOver的值,似乎在OnCollisionEnter2D方法中将gameOver的值设置为true,但是在登录OnTriggerEnter2D方法时,它显示为false。我尝试使用out-Keyword在单独的方法中分配值,但是那也不起作用。谁能帮我?预先感谢。

1 个答案:

答案 0 :(得分:1)

您没有在全局状态下更改gameOver bool,只有一个障碍知道您输了。最简单的解决方案:

private static bool gameOver;

另一种解决方案是将gameOver(如果您正在使用的话)存储在GameManager单例中

您还可以将此状态存储在一个静态类中:

public static class GameStates
{
    public static bool IsGameOver = false;
    public static int Score = 0;
    //other global states
}

并毫无问题地使用它:

if (!GameStates.IsGameOver)
{
    //do something
}

如果您不想使用静态(这不是统一的最佳解决方案),请使用单例(不要为小型游戏创建复杂的体系结构)