@there4

Как правильно запросить метод из Update?

Привет! Есть скрипт, ведущий обратный отсчет, в update. Каждые 30 мне секунд необходимо выводить метод TimerStatus. Но у меня метод выводится несколько раз, пока время по таймеру равно 30. Помогите это победить!
function Update()
{
  if (!isTimerEnd) {
    timer -= Time.deltaTime; 
  } 

  if (timer > 0) {
    var mDisplay : String = parseInt( timer / 60 ).ToString();

    var sDisplay : String = parseInt( timer ).ToString();
     
    if ( (timer - ( parseInt(mDisplay) * 60)) > 10 ) {
         sDisplay = parseInt( timer - ( parseInt(hDisplay) * 60) ).ToString();
    } 
    else {
      mDisplay = "0" + parseInt( timer - 
                          ( parseInt(hDisplay) * 60) ).ToString(); 
    }

    if (sDisplay == "30" && !calledTimerStatus ) {
       calledTimerStatus = true;
       TimerStatus();
    } else calledTimerStatus = false;  
    
  }
}
function TimerStatus() {
  Debug.Log("30 sec stat");
}


Результат:
5b05446c6d24a185076151.png
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Во-первых, не используйте UnityScript, он уже без поддержки, а в 2018.2 его совсем выпилят.
Во-вторых, парсить число в int, превращать его в строку и с сравнивать со строковым представлением числа - плохая идея. Вы переменные экономите или что?
В-третьих, не используйте Invoke, вызывать методы по строке это очень плохая практика, не говоря уже о том, что в вашем случае он не нужен, достаточно прямого вызова.
Что касаемо многократного вызова TimerStatus, так тут всё просто. Update вызывается много раз в секунду, а значение sDisplay меняется один раз в секунду, простейшее решение - добавить флажок, который будет выставляться каждые тридцать секунд, а в остальные секунды сбрасываться.
if (seconds == 30)
{
    if (!calledTimerStatus)
    {
        calledTimerStatus = true;
        TimerStatus();
    }
}
else
{
    calledTimerStatus = false;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы