Как использовать функцию IF 1 раз?

#c# #unity3d

#c# #unity3d

Вопрос:

здравствуйте, я хочу использовать функцию if 1 раз, и я не хочу, чтобы она повторялась. Как я могу сделать?

Оценка кода:

 public void IncrementScore()
{
    // Add to the score
    score  ;

    // Update the score text
    scoreText.text = ""   score;

    // Is there a new hiscore?
    if (score > hiscore)
    {

        // Set the new hiscore
        hiscore = score;

        // Save the new hiscore
        PlayerPrefs.SetInt("hiscore", hiscore);

        // Update the hiscore text
        hiscoreText.text = ""   hiscore;
    }

    Congratulations.instance.Score25Congratulations();
}
 

Если функция, которую я хочу использовать 1 раз

 public void Score25Congratulations()
{
    if (CollectorScript.instance.hiscore == 25)
    {
        Congratulations25.SetActive(true); //I want it to show 1 time
        Time.timeScale = 0f;
    }
}
public void Score25CongratulationsButton()
{
    Congratulations25.SetActive(false);
    Time.timeScale = 1f;
}
 

Я хочу, чтобы она отображалась 1 раз, но это не происходит повторно. Итак, если число равно 25 Поздравлениям25.SetActive (true); Он повторяется, я не хочу, чтобы это повторялось, я просто хочу, чтобы это вышло один раз, возможно ли такое?

Комментарии:

1. Обратите внимание, что UnityScript — это язык программирования, производный от Javascript, и он был создан для Unity. Unity устарела в 2017 году в пользу языка программирования C #. Поскольку это совершенно отдельный язык программирования, использование [unityscript] тега в вашем вопросе C # сбивает с толку, поэтому я удалил его для вас.

Ответ №1:

В общем, я бы проверил его только на новый рекорд, который уже сокращает объем работы.

А затем добавьте простой флаг, который контролирует, что сообщение отображается только при первом достижении 25.

В общем, я бы тоже не стал перебирать одноэлементные шаблоны вперед и назад, а скорее назвал бы это как

 bool congrats25alreadyDisplayed;

private void Awake ()
{
    congrats25alreadyDisplayed = PlayerPrefs.GetInt("congrats25", 0) > 0;
}

public void IncrementScore()
{
    // Add to the score
    score  ;

    // Update the score text
    scoreText.text = score.ToString();

    // Is there a new hiscore?
    if (score > hiscore)
    {
        // Set the new hiscore
        hiscore = score;

        // Save the new hiscore
        PlayerPrefs.SetInt("hiscore", hiscore);

        // Update the hiscore text
        hiscoreText.text = hiscore.ToString();

        if(hiscore >= 25 amp;amp; !congrats25alreadyDisplayed)
        {
            // Set flag so never displayed again
            congrats25alreadyDisplayed = true;
            PlayerPrefs.SetInt("congrats25", 1);
            PlayerPrefs.Save();

            Congratulations.instance.Score25Congratulations();
        }
    }
}
 

А в вашем другом скрипте просто

 public void Score25Congratulations()
{ 
    Congratulations25.SetActive(true);
    Time.timeScale = 0f;
}
 

Просто примечание: это Highscore 😉