【发布时间】:2019-03-04 11:33:37
【问题描述】:
我制作了一个小型街机风格的游戏,其中一个布尔变量跟踪游戏是否结束(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 在单独的方法中分配值,但这也不起作用。谁能帮我?提前致谢。
【问题讨论】:
-
先触发哪个方法?是 OnCollisionEnter2D 还是 OnTriggerEnter2D?
-
您的事件似乎以相反的顺序触发,首先是
Enter2D,然后是Collision。 -
您是否尝试将其设为静态?当一个新游戏发生并且它被设置为默认值时,您可能正在创建该类的一个新实例。
-
@Reniuz/HimBromBeere,根据manual,先调用OnTriggerXXX再调用OnCollisionXXX
-
@jdweng 在 Unity 中使用
static不是最好的主意,通常意味着您不知道如何正确使用 Unity。我们这里没有足够的信息,但正确的方法是让某个类持续只要static字段本来可以持续,这可能会持续到游戏结束
标签: c# unity3d methods boolean