В последнее время у меня возникали некоторые странные проблемы, поэтому я решил начать новый проект в 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](https://i.stack.imgur.com/tGVSF.png)
Обратите внимание, что эти значения одинаковы, если они хранятся в полях при вызове обновления, а не при вызове непосредственно из OnGui.