deltaTime과 fixedDeltaTime
델타타임의 용도
타겟 디바이스마다 성능 격차로 인해 프레임 수행 시간이 다를 것을 대비해 보정하기 위해 사용된다.
예를 들어 A 디바이스는 1초에 10프레임, B 디바이스는 1초에 20프레임이 재생된다면
그냥 Update()
내에서 프레임마다 거리를 1씩 가도록 구현했을 경우, 1초에 A는 10, B는 20만큼 이동하게 된다.
하지만 원래 의도가 동일한 시간에 동일한 거리만큼 이동하도록 구현하는 것이었다면, 델타타임을 곱해주면 된다.
프레임마다 1 * deltaTime
만큼 이동하도록 구현하면 A의 델타타임은 0.1, B의 델타타임은 0.05이므로
A, B 모두 동일하게 1초에 1씩 이동하게 할 수 있다.
deltaTime
Time.deltaTime
을 통해 참조할 수 있다.
이전 프레임의 발생 시각과 현재 프레임의 발생 시각 사이의 시간 간격,
즉 이전 프레임의 수행에 걸린 시간을 의미한다.
Update()
내에서 시간의 진행에 따른 일정한 기능을 구현하기 위해 Time.deltaTime
을 이용해 보정한다.
fixedDeltaTime
Time.fixedDeltaTime
을 통해 참조할 수 있다.
기본적으로 물리 업데이트 발생 주기, 즉 Fixed Time Step 값을 의미한다.
마찬가지로 FixedUpdate()
내에서 Time.fixedDeltaTime
을 이용해 보정한다.
참고사항
FixedUpdate()
내에서 Time.deltaTime
을 참조해도 실제로는 Time.fixedDeltaTime
의 값이 참조된다.
하지만 반대로 Update()
내에서 Time.fixedDeltaTime
을 참조하면 그대로 Time.fixedDeltaTime
의 값이 참조되니 주의해야 한다.
그러니 타겟 디바이스의 성능에 따른 보정을 위해 델타 타임을 사용할 때,
Update()
와 FixedUpdate()
내에서 Time.deltaTime
을 똑같이 참조해도 각각 의도에 맞게 사용된다.
Frame Rate
‘프레임률’이라고도 부르며, 초당 프레임 진행 횟수를 의미한다.
즉, 델타 타임과는 역수 관계이다. (`1 / deltaTime == frameRate)
흔히 FPS(Frame Per Second)라고도 한다.
Application.targetFrameRate
를 통해 최대 프레임률을 제한할 수 있으며,
예를 들어 60으로 설정할 경우 Frame Rate는 60을 넘지 못하게 된다.
캐주얼 게임은 30, 액션 게임은 60으로 설정하는 경우가 많다.