This document is about: QUANTUM 3
SWITCH TO

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