Время не обновляется корректно в инспекторе Unity

#c# #unity3d

#c# #unity-игровой движок

Вопрос:

Когда я запускаю игру, инспектор Unity обновляется каждые несколько секунд, но totalTimeElapsed увеличивается только с интервалом в 0,1 секунды. Я пробовал аналогичную вещь с totalTimeElapsed = Time.deltaTime , но с тем же результатом.

Как мне получить общее время с момента запуска игры?

 float totalTimeELapsed = 0;
int dayCount = 0;

private void Update()
{
    totalTimeElapsed = Time.time;
    dayCount  = 1;

    AFunctionTakingLotsOfTime();
}
  

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

1. Что должно произойти? Что делать BeginDay , MidDay и EndDay ? Что вы имеете в виду под only increments in a series of 0.1 seconds ? Из документов : This is the time in seconds since the start of the game. а также Try to avoid regular (frame) use of Time.time. It is more intended to supply the time the game has been running, and not time per frame. .. итак, чего вы на самом деле хотите достичь?

Ответ №1:

Поскольку AFunctionTakingLotsOfTime() это занимает много времени, вам нужно Time.realtimeSinceStartup

Time.realtimeSinceStartup выполняется в режиме реального времени, а не вычисляются значения времени с частотой кадров, которые, вероятно, путаются из-за того, что ваша функция занимает много времени.

В качестве альтернативы вы могли бы использовать DateTime .

Обратите внимание, что на оба эти параметра не повлияют такие вещи, как масштаб времени, и вы можете захотеть изменить свою функцию, чтобы она была менее интенсивной, например, вычислять только небольшой фрагмент любого данного вызова (или с помощью сопрограммы) или путем разделения метода на поток заданий.

Ответ №2:

 float totalTime = 0f;

// Update is called once per frame
void Update () {

    totalTime  = Time.deltaTime;
}
  

Я полагаю, что то, что вы ищете, было бы чем-то вроде этого. Предполагая, что этот класс присутствует во время выполнения вашей игры, у вас должна быть точная переменная, которая может сообщить вам время, прошедшее с момента запуска игры.

Возможно, вам также захочется знать, что вызов update происходит один раз за кадр, т.Е. если вы работаете со скоростью 60 кадров в секунду, обновление будет вызвано 60 раз за эту секунду. Вместо этого вы можете попробовать FixedUpdate, который обновляется с интервалами реального времени.

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

1. which takes you current FPS into account разве это не совсем наоборот? Update вызывается каждый кадр, в то время как FixedUpdate вызывается с фиксированными интервалами реального времени, независимо от того, какой FPS.

2. Я пробовал это, но это не сработало для функций, которые занимают много времени.