我有一个关于if和else的问题。我想设置一个来自"奖牌"数组基于"得分"变量:
if(score > 0)
{
medals[0].SetActive(true);
}
else if
(score > 2)
{
medals[1].SetActive(true);
}
else if
(score > 5)
{
medals[2].SetActive(true);
}
它只显示一张图片,铜牌奖牌[0]。有没有更好的方法来实现这一目标?
抱歉英语不好 并感谢您的建议
我的更新代码
score += Time.deltaTime;
Scoretext.text = ((int)score).ToString();
if (PlayerPrefs.GetFloat("Highscore") < score)
PlayerPrefs.SetFloat("Highscore", score);
if (score > 3)
{
bronze.GetComponent<Image>().enabled = true;
}
if
(score > 7)
{
silver.GetComponent<Image>().enabled = true;
}
if
(score > 13)
{
gold.GetComponent<Image>().enabled = true;
}
答案 0 :(得分:0)
&#39; else-if&#39;声明只有在&#39; if&#39;和&#39;否则 - 如果在它之上是假的。在这种情况下,任何得分> 0将始终在第一个if语句处停止,并且永远不会检查剩余的else-ifs。
如果您的目的是显示所有三个徽章(一个在得分> 0,下一个得分> 2,最后一个得分> 5),您确实可以使用您建议的代码作为解决方案。
if(score > 0)
{
medals[0].SetActive(true);
}
if (score > 2)
{
medals[1].SetActive(true);
}
if
(score > 5)
{
medals[2].SetActive(true);
}
这允许每个&#39;如果&#39;无论前面的那个,都要运行的语句。查看您在其他问题中发布的代码,看起来这是在您的Update循环中,对吗?如果是这样,这可能是一个更好的解决方案。它只会将每枚奖牌设置为活跃一次。
if(score > 5 && !medals[2].activeInHierarchy)
{
medals[2].SetActive(true);
}
else if (score > 2 && !medals[1].activeInHierarchy)
{
medals[1].SetActive(true);
}
else if (score > 0 && !medals[0].activeInHierarchy)
{
medals[0].SetActive(true);
}
而0 <0。得分&lt; = 2它到达底部,如果并且如果第一枚奖牌尚未激活则激活第一枚奖牌。在2到5之间,它激活第二枚奖牌,最后得分> 5将激活第三枚奖牌。