2016-07-08 5 views
0

У меня есть вопрос, если и если if. Я хочу, чтобы установить изображение из массива «медали» на основе «забитого» переменный:Unity Flappy bird Значки

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

Подумайте о своей логике на мгновение. Счет '> 2', очевидно,'> 0', так что, как вы думаете, что происходит? Пройдите через код. –

+0

@MattBurland я использовал if и else if, он вообще не работал, только одно изображение, но когда я изменяю else, если на каком-то методе он работает нормально. –

+0

И почему вы так думаете? 'if' vs' else if'? 'else' выполняется только в том случае, если' if' оценивается как false. –

ответ

0

An «еще, если» заявление будет достигнуто только тогда, когда «если» и " else - если выше, то false. В этом случае любой балл> 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); 
} 

Это позволяет выполнять любое выполнение «if» независимо от того, что было до него. Глядя на код, который вы отправили в другом вопросе, похоже, что это в вашем цикле обновления, правильно? Если это так, это может быть лучшим решением. Он только устанавливает каждую медаль активным один раз.

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 < < оценка = 2 она достигает дна еще, если и активирует первую медаль, если он еще не включен. Между 2 и 5 он активирует вторую медаль, и, наконец, счет> 5 активирует 3-ю медаль.

+0

привет спасибо за скрипт, я отправил свой скрипт, что я использую сейчас, с if if if, о чем я говорил, вы можете мне помочь? –

+0

Что-то не так? – matterickson

+0

i изменен с медалей [] на GetComponent Изображения, и это все, если если и не знаете, правильно ли это работает, я редактирую свой пост и ставил 2 кода, поэтому, пожалуйста, помогите –