版本: Unity 6 (6000.0)
语言English
  • C#

Time.realtimeSinceStartup

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法采纳所有提交,但我们确实阅读了用户提出的每个建议更改,并在适用情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

public static float realtimeSinceStartup;

描述

游戏开始后以秒为单位的实时时间(只读)。

这是应用程序启动后以秒为单位的时间,如果在一帧中多次调用,它不是恒定的。 Time.timeScale 不影响此属性。

在几乎所有情况下,您都应该使用 Time.timeTime.unscaledTime。如果您确实需要使用 realtimeSinceStartup,在大多数情况下,您应该使用 Time.realtimeSinceStartupAsDouble 以获得更高的精度。

如果您想将 Time.timeScale 设置为零以暂停应用程序,但仍然希望能够以某种方式测量时间,则使用 realtimeSinceStartup 很有用。在编辑器脚本中,您还可以使用 realtimeSinceStartup 在编辑器暂停时测量时间。

realtimeSinceStartup 返回系统计时器报告的时间。根据平台和硬件的不同,它可能会报告相同的时间,即使是在连续的几帧中。如果您要将某些东西除以时间差,请考虑这一点(例如,时间差可能会变为零)。

注意:存在一个 已知问题,其中 realtimeSinceStartup 在使用 OnDestroy 时返回不正确的值。

using UnityEngine;
using System.Collections;

// An FPS counter. // It calculates frames/second over each updateInterval, // so the display does not keep changing wildly. public class ExampleClass : MonoBehaviour { public float updateInterval = 0.5F; private double lastInterval; private int frames; private float fps; void Start() { lastInterval = Time.realtimeSinceStartup; frames = 0; }

void OnGUI() { GUILayout.Label("" + fps.ToString("f2")); }

void Update() { ++frames; float timeNow = Time.realtimeSinceStartup; if (timeNow > lastInterval + updateInterval) { fps = (float)(frames / (timeNow - lastInterval)); frames = 0; lastInterval = timeNow; } } }