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常量.这怎么可能 :-/
解决方法 在我看来,fps计数器是正确的,58.82的FPS是由物理时间设置的变化引起的.物理引擎可能无法在可用的时间步长(0.005,这是非常低)完成其计算,这意味着它将继续计算,直到达到最大时间步长,在您的情况下是0.017.这意味着所有帧将占用0.017加上您可能拥有的渲染/脚本的任何其他开销. 1 / 0.017等于58.82.也许你可以通过其他方式解决你对物理学的任何问题,而不必过多地降低固定的时间步长.
总结以上是内存溢出为你收集整理的android – 常量且可能不准确的帧速率全部内容,希望文章能够帮你解决android – 常量且可能不准确的帧速率所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)