Elapsed Time
イントロダクション
Quantumでは2種類のelapsed time計算方法があります。:
- Frame.Numberベースの計算方法;
- 累積デルタタイムベースの計算方法
Frame Numberでの時間ベース
セッション開始からの経過時間を最も簡単に計算できるのはframe.Number
ベースでの計算方法です。:
frame.Number * frame.deltaTime;
または
frame.Number / frame.UpdateRate
上記の計算方法はは両方とも秒数で時間を返します。
注意: frame.Number
はRollbackWindow
出始めます。 0からではありません!
これで経過時間の合計を正確に、絶対的にトラックします。例:この経過時間は同じティック番号でのすべてのゲームクライアントで共通のものになります。
Frameを拡張する
結果へのアクセスを簡単にするため、以下のスニペットをFrame.User.cs
でのFrameの部分定義に実装できます。
C#
namespace Quantum {
unsafe partial class Frame {
public FP ElapsedTime {
get {
return DeltaTime * (Number - SessionConfig.RollbackWindow);
}
}
}
}
Unityから
UnityからDeterministic Session内のSimulationTimeElapsed
プロパティへのアクセスを得られます。
C#
QuantumRunner.Default.Game.Session.SimulationTimeElapsed
注意: この方法では、予測フレームナンバーのダブルベースとシミュレーションデルタタイムを返します。 RollbackWindow は考慮に 入れません。
現在のフレームナンバーからRollbackWindowを引いて、そこにティックのデルタタイムを掛けます。
グローバル変数としての累積時間
ランタイム中に Deltatime を変更する必要がある場合、またはゲームを保留して後からピックアップするような場合、手動で累積デルタタイムをトラッキングする必要があります。
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