привет, я хочу использовать функцию 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 Congratulations25.SetActive (true); Это повторяется, я не хочу, чтобы это повторялось, я просто хочу, чтобы это вышло один раз, такое возможно?





В общем, я бы проверил его только на новый Highscore, что уже сокращает работу.
А затем добавьте простой флаг, который контролирует, что сообщение отображается только при первом достижении 25.
В общем, я бы также не стал проходить шаблоны Singleton вперед и назад, а скорее назвал бы это так
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 && !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 ;)
Обратите внимание, что UnityScript — это язык программирования, производный от Javascript, и он был создан для Unity. Unity отказалась от него в 2017 году в пользу языка программирования C#. Поскольку это совершенно отдельный язык программирования, использование тега
[unityscript]в вашем вопросе о C# сбивает с толку, поэтому я удалил его для вас.