2013-04-18 58 views
4

我正在使用以下代碼來計算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; 
      } 
    } 

這是以前的工作,或至少似乎是working.Then我是有一些問題與物理,所以我改變了固定時間步長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常量。這怎麼可能: -/

回答

3

在我看來,fps計數器是正確的,58.82的FPS是由物理時間設置的變化引起的。物理引擎可能無法在可用的時間步(0.005,這是非常低的)完成計算,這意味着它將保持計算,直到它達到最大時間步,在你的情況下是0.017。這意味着所有的幀將需要0.017加上你可能擁有的渲染/腳本的任何其他開銷。而1/0.017恰好等於58.82。

也許你可以通過其他方式解決物理學上的任何問題,而不會嚴重降低固定時間步長。

+0

所以我只需要增加固定的時間步?我可以保持最大時間步長爲0.017嗎? – noob 2013-04-18 16:41:56

+0

@創始人我認爲這可能有效。你可以嘗試不同的值。您也可以嘗試直接在設備上進行分析,以查看物理模擬需要多少毫秒,並相應地調整固定的時間步長。 – alexFlorea 2013-04-19 06:05:36