我制作了一款小型的街机风格游戏,其中的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在单独的方法中分配值,但是那也不起作用。谁能帮我?预先感谢。
答案 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
}
如果您不想使用静态(这不是统一的最佳解决方案),请使用单例(不要为小型游戏创建复杂的体系结构)