2013-12-19 31 views
1

當用戶按下按鈕時,fwdi被設置爲1,從而啓動if語句。對我來說,如果我在每次更新時將fwdi降低0.1並在每次更新時將玩家移動0.1,那麼所有事情都應該在1秒內完成,但運動速度要比1秒快得多。我有一個動畫,也需要1秒鐘,他們不匹配。統一3D定時器似乎運行得太快

編輯

void Update() 
{ 

    if (fwdi > 0.0f) 
    { 

     fwdi = fwdi - 1.0f * Time.deltaTime; 
     amountToMove.y = 1.0f * Time.deltaTime; 
     transform.Translate (amountToMove); 
     if (fwdi == 0.0f) 
     { 

      amountToMove.y = 0.0f; 
      fwdi = 0.0f; 
     } 
    } 
} 

回答

4

所有你應該需要做補償幀時間(IE:在60fps,更新被稱爲60次每秒)

void Update() 
{ 
    if (fwdi > 0) 
    { 
     amountToMove.y = 0.1f*Time.deltaTime; 
     transform.Translate (amountToMove); 
     fwdi = fwdi - amountToMove.y; 
     //This code bellow looks redundant, and probably unnecessary 
     if (fwdi == 0) 
     { 
      amountToMove.y = 0; 
      fwdi = 0f; 
     } 
    } 
} 

還要考慮穿着FixedUpdate運動。固定更新工作方式類似的幾個關鍵型動物更新:

-Fixedupdate較平時更新功能具有優先權,

-unity默認調用帽固定的更新是每秒

20倍它通常建議你可以使用輕量級過程,這些過程受益於固定更新的可預測更新間隔,如移動和物理。

注意 ::它仍然是一個好主意,通過Time.fixedDeltaTime乘在FixedUpdate一切,以防萬一Fixedupdate未能達到每秒計數20打勾。

+0

謝謝,我有時間排序,以便實時計算實時。我將腳本附加到一個非活動對象,一旦我刪除了時間由於某種原因恢復正常。現在幾乎是完美的,但是每當我將播放器移動到如此數量時,它實際上將它移動到接近1.02f,這聽起來不像聽起來那麼明顯。有沒有辦法讓這個站點停止在1?我已經更新了我的所有內容,謝謝你的幫助。我已經嘗試過使用FixedUpdate和fixedDeltaTime,但是這會產生比不使用固定更大的差異。 – SpunkTrumpet

+0

刪除第二條if語句略微改善了結果,但是移動距離仍然比它應該少一點。 – SpunkTrumpet

+0

'if(amountToMove.y> 1.0f)amountToMove.y = 1.0f;' – anothershrubery

0

現在我幾乎一無所知團結,所以這可能不是接近的答案。通常情況下,你可以通過計算一個因子來使遊戲幀速率獨立,比如說如果你不想在一秒內移動1個距離,那麼你計算時間過去並應用乘法。例如。 「timepassed因素* amounttomove」

從我可以收集你需要使用Time.deltaTime這將使你的幀之間傳遞的實際時間,那裏的timeScale真的只是爲慢動作等等

所以... amountToMove.y = 1f * Time.deltaTime * ???;