我正在使用以下代码来计算 Unity3d 4.0 中的帧速率。它应用于 NGUI 标签。
void Update () {
timeleft -= Time.deltaTime;
accum += Time.timeScale/Time.deltaTime;
++frames;
// Interval ended - update GUI text and start new interval
if( timeleft <= 0.0 )
{
// display two fractional digits (f2 format)
float fps = accum/frames;
string format = System.String.Format("{0:F2} FPS",fps);
FPSLabel.text = format;
timeleft = updateInterval;
accum = 0.0F;
frames = 0;
}
}
它以前可以工作,或者至少看起来可以工作。然后我遇到了一些物理问题,所以我将固定时间步长更改为 0.005 ,将最大时间步长更改为 0.017 。是的,我知道它太低了,但我的游戏在这方面运行良好。
现在的问题是上面的 FPS 代码一直返回 58.82。我已经检查了不同的设备(Android)。它就是不动。我认为这可能是正确的,但是当我看到 profiler 时,我可以清楚地看到那里的起伏。很明显,这很可疑。
难道我做错了什么?我从某个地方复制了代码(必须来自脚本 wiki)。有没有其他方法可以知道正确的 FPS?
通过从这个问题中获取线索,我在第一个答案中尝试了所有方法。甚至以下代码也返回恒定的 58.82 FPS。它仅发生在android设备中。在编辑器中,我可以看到 fps 差异。
float fps = 1.0f/Time.deltaTime
;
所以我检查了 Time.deltaTime 的值,它在设备中是 0.017 常量。这怎么可能 :-/