我使用以下代码计算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)。它只是没有让步。我认为这可能是正确的,但是当我看到探查器时,我可以清楚地看到那里的起伏。所以显然它有点可疑。
我做错了吗?我从某处复制了代码(必须来自脚本wiki)。有没有其他方法可以知道正确的FPS?
通过从this questions获取提示,我在第一个答案中尝试了所有方法。即使以下代码返回恒定的58.82 FPS。它只发生在Android设备上。在编辑器中我可以看到fps的差异。
float fps = 1.0f/Time.deltaTime
;
所以我检查了Time.deltaTime的值,它在设备中是0.017常量。怎么可能这样: - /
答案 0 :(得分:3)
在我看来,fps计数器是正确的,58.82的FPS是由物理时间设置的变化引起的。物理引擎可能无法在可用的时间步长(0.005,这是非常低)完成其计算,这意味着它将继续计算,直到达到最大时间步长,在您的情况下是0.017。这意味着所有帧将占用0.017加上您可能拥有的渲染/脚本的任何其他开销。 1 / 0.017等于58.82。
也许你可以通过其他方式解决物理问题,而不会降低固定的时间步长。