This document is about: QUANTUM 2
SWITCH TO

Elapsed Time

イントロダクション

Quantumでは2種類のelapsed time計算方法があります。:

  • Frame.Numberベースの計算方法;
  • 累積デルタタイムベースの計算方法

Frame Numberでの時間ベース

セッション開始からの経過時間を最も簡単に計算できるのはframe.Numberベースでの計算方法です。:

Unknown

frame.Number * frame.deltaTime;
または
frame.Number / frame.UpdateRate

上記の計算方法はは両方とも秒数で時間を返します。

注意: frame.NumberRollbackWindow出始めます。 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