This document is about: QUANTUM 2
SWITCH TO

Elapsed Time

概述

在Quantum中有兩種方法來計算耗時:

  • 基於Frame.Number;及,
  • 基於已累積的差量時間。

基於幀號碼的時間

計算從遊戲階段開始後的耗時的最簡單的方法是基於frame.Number

Unknown

frame.Number * frame.deltaTime;
or
frame.Number / frame.UpdateRate

兩個計算將傳回一個以秒為單位的時間。

注意事項: frame.NumberRollbackWindow開始,不是在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