This page has not been upgraded to Quantum 3.0 yet. The information may be out of date.
経過時間
はじめに
Quantumで経過時間を計算する方法は2つあります:
- フレーム番号に基づく方法
- 蓄積されたデルタタイムに基づく方法
フレーム番号に基づく時間
セッション開始から経過した時間を計算する最も簡単な方法は、frame.Number
に基づくものです:
frame.Number * frame.deltaTime;
or
frame.Number / frame.UpdateRate
両方の計算は秒単位の時間を返します。
注意: frame.Number
は0ではなく、RollbackWindow
から始まります!
これにより、経過した総時間を正確かつ決定論的に追跡できます。つまり、同じティック番号のすべてのゲームクライアントで同一になります。
フレームの拡張
結果へのアクセスを容易にするために、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
注意: これは、予測フレーム番号とシミュレーションデルタタイムに基づいてダブル値を返します。これは__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