This document is about: QUANTUM 2
SWITCH TO

경과 시간

소개

Quantum에서 경과 시간을 계산하는 방법에는 두 가지가 있습니다.

  • Frame.Number 기반으로 합니다. 그리고,
  • 누적 델타 시간을 기준으로 합니다.

프레임 번호의 시간 기반

세션이 시작한 시간부터 경과한 시간을 계산하는 가장 간단한 방법은 frame.Number 기반으로 계산하는 것입니다.:

frame.Number * frame.deltaTime;
또는
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);
            }
        }
    }
}

유니티에서

유니티에서 결정론적 세션에서 SimulationTimeElapsed 속성에 접근합니다.

C#

 QuantumRunner.Default.Game.Session.SimulationTimeElapsed

노트: 이는 예측된 프레임 번호와 시뮬레이션 델타 시간을 기준으로 두 배 값을 반환합니다. RollbackWindow 를 고려하지 않습니다.

현재 프레임 번호에서 RollbackWindow를 뺀 값에 틱의 델타 시간을 곱할 수 있습니다.

글로벌 변수로 시간 누적

런타임에 Deltime 을 변경해야 하거나, 게임을 일시 중단하고 나중에 픽업하려면 누적된 델타 시간을 수동으로 추적해야 합니다.

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에 필요한 정밀도는 결국 부정확성으로 이어집니다. 정밀도를 높이는 방법은 time 대신 ticks 를 추적하는 것입니다. 이러한 값은 Int32를 사용하여 계산할 수 있습니다.

Back to top