团结飞扬的鸟徽章

时间:2016-07-08 20:33:59

标签: c# unity3d unity5 unity3d-2dtools

我有一个关于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]。有没有更好的方法来实现这一目标?

抱歉英语不好 并感谢您的建议

Unity High_Score Badges C#

我的更新代码

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;
            }

1 个答案:

答案 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将激活第三枚奖牌。