Почему Time.deltaTime всегда возвращает постоянное значение - и почему оно отличается от Time.unscaledDeltaTime, когда Timescale установлен в 1? - PullRequest
0 голосов
/ 25 октября 2019

В последнее время у меня возникали некоторые странные проблемы, поэтому я решил начать новый проект в Unity 2018.4, у проекта есть одно единственное поведение:

public class TestTime : MonoBehaviour
{
    // Update is called once per frame
    void Update()
    {
        int randLoop = UnityEngine.Random.Range(9999999, 999999999);
        for (int i = 0; i < randLoop; i++)
        {
            continue;
        }
    }

    private void OnGUI()
    {
        string guiString = "Time: " + Time.time + "\r\n";
        guiString += "Unscaled time: " + Time.unscaledTime + "\r\n";
        guiString += "Timescale: " + Time.timeScale + "\r\n";
        guiString += "Time.deltaTime: " + Time.deltaTime + "\r\n";
        guiString += "Time.unscaledDeltaTime: " + Time.unscaledDeltaTime + "\r\n";
        GUI.Label(new Rect(25, 15, 800, 800), guiString);
    }
}

Этот цикл заставляет частоту кадров колебаться в пределах 0,5-3fps.

Ожидается, что графический интерфейс должен показывать довольно высокое значение для Time.deltaTime, и оно должно совпадать с Time.unscaledTime, поскольку Time.timeScale не изменяется по умолчанию 1.

Однако Time.time ползет с очень низкой скоростью, Time.deltaTime остается с фиксированным значением 0,1, и только значения Time.unscaledTime возвращают действительные данные.

Конечно, Time.unscaledDeltaTime всегда должен равняться Time.deltaTime, когда Timescale равен 1 - и, конечно, Time.time должен возвращать то же значение, что и Time.unscaledTime, если Timescale был равен 1 с момента запуска приложения?

OnGui ouput

Обратите внимание, что эти значения одинаковы, если они хранятся в полях при вызове обновления, а не при вызове непосредственно из OnGui.

1 Ответ

0 голосов
/ 25 октября 2019

Из руководства Unity: https://docs.unity3d.com/ScriptReference/Time-deltaTime.html

Не полагайтесь на Time.deltaTime внутри MonoBehaviour.OnGUI. Unity может вызывать OnGUI несколько раз за кадр. Приложение использует одно и то же значение deltaTime для каждого вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...