Elapsed Time
概述
在Quantum中有兩種方法來計算耗時:
- 基於Frame.Number;及,
- 基於已累積的差量時間。
基於幀號碼的時間
計算從遊戲階段開始後的耗時的最簡單的方法是基於frame.Number
:
frame.Number * frame.deltaTime;
or
frame.Number / frame.UpdateRate
兩個計算將傳回一個以秒為單位的時間。
注意事項: frame.Number
在RollbackWindow
開始,不是在0開始!
這將準確地及確定性地追蹤總耗時,也就是它在所有遊戲客戶端上在相同的刷新號碼時將完全相同。
擴展幀
為了方便存取結果,您可以在Frame.User.cs
的幀的部分定義中執行下列程式碼片段:
C#
namespace Quantum {
unsafe partial class Frame {
public FP ElapsedTime {
get {
return DeltaTime * (Number - SessionConfig.RollbackWindow);
}
}
}
}
從Unity
從Unity,您可以在確定性遊戲階段中存取SimulationTimeElapsed
屬性。
C#
QuantumRunner.Default.Game.Session.SimulationTimeElapsed
注意事項: 這將傳回基於已預測幀號碼及模擬差量時間的雙倍值。它 不會 不會將 復原視窗 列入考慮。
您可以將目前的幀號碼減去復原視窗,然後與刷新的差量時間相乘。
作為一個全域變數的累積時間
如果您需要在運行階段更改 差量時間,或是希望暫停一個遊戲並且稍後再繼續,您將需要手動追蹤已累積差量時間。
C#
// add a global variable to your qtn-file
global {
FP ElapsedTime;
}
// create a system
public unsafe class TimeSystem : SystemMainThread {
public override void Update(Frame f) {
f.Global->ElapsedTime += f.DeltaTime;
}
}
注意事項: FP所需的精確度最終將導致不準確。改善準確度的一個方法是追蹤 刷新 而不是 時間;可以使用Int32來計算這些。
Back to top