Zefirot
@Zefirot

Выполняетя ли Time.deltaTime всегда равномерно общего времени?

Вот у меня в префабах нужно прибавлять каждую допустим секунду счетчик
private float TM = 0, TMSpeed = 1f;
private int Counter = 0;
void Update(){
  TM += Time.deltaTime;
  if(TM > TMSpeed ){
    TM = 0;
    ++Counter;
    }
  }

Предварительно проверил запустив несколько префабов и вроде как везде считает ровно и посекундно.
Но так ли это будет постоянно? Можно ли такой счётчик уверенно применять, всегда ли он будет прибавлять секунду (в данном примере), равномерный ли на всех префабах будет всегда счётчик?
  • Вопрос задан
  • 41 просмотр
Решения вопроса 2
GavriKos
@GavriKos Куратор тега Unity
Нет. У вас 100% будет ошибка.
Смотрите, допустим deltaTime = 0.9
Тогда значения в апдейте - 0.9, 1.8.
На 1.8 вы стриггеритесь, и потом значение вы занулите и потеряете свои 0.8 - почти секунду!

Но если говорить о "равномерности на префабах" - то да, update вызывается последовательно для всех активных объектов, и у всех будет одинаковый deltaTime - время ПРЕДЫДУЩЕГО кадра (прошу заметить, а не текущего), и пока по всем объектам не пройдет апдейт - следующий кадр не начнется.
Ответ написан
Комментировать
MANAB
@MANAB
Разрабатываю на C#: Web, Desktop, Gamedev
От кадра к кадру Time.deltaTime может иметь разные значения, это будет заметно если начнется тяжелая логика или фризы от вызовов Garbage Collector.
Если важны вызовы через одинаковые периоды времени - используйте FixedUpdate и Time.fixedDeltaTime (его можно в параметрах указать свое).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы