경과 시간
소개
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