이번에는 꽤 중요한 개념인 Tick과 DeltaTime에 대해서 알아보고자 한다.
'Tick' 함수는 게임이 플레이되는 동안 매 프레임마다 호출되는 함수라고 하였다. 따라서 지속적으로 위치가 변하거나 특정 동작을 감지해야 하는 경우 Tick 함수 아래에 구현하곤 했다.
Tick 함수를 고려해야 할 것이 FPS(Frame Per Second)이다.
FPS는 초당 몇 프레임을 연산 및 실행할 수 있는지를 나타낸다.
성능이 좋을수록 더 빠른 연산이 가능할 것이므로 FPS가 높을 것이다.
만약 움직이는 발판을 만들고 싶다고 할 때, 매 틱마다 Position을 조금씩 변경함으로써 구현할 수 있다. 예컨대 1유닛만큼 변경한다고 해 보자.
그렇다면 초당 100프레임을 연산하는 컴퓨터에서는 1초에 Tick 함수가 100번 실행되고, 초당 30프레임을 연산하는 컴퓨터에서는 30번 실행된다. 이렇게 프레임의 차이는 곧 틱 함수의 실행 횟수의 차이로 이어지며, 이는 게임 플레이가 달라질 수 있다는 것을 의미한다.
따라서 어떤 값을 매 틱마다 변경하는 등의 연산을 수행하면, 그 게임을 실행하는 환경에 따라 다른 플레이 환경이 만들어질 수 있다.
DeltaTime은 1프레임을 연산하는 데 소요되는 시간이다.
어떤 값에 DeltaTime을 곱해줌으로써 프레임에 독립적으로 동작하게끔 구현할 수 있다.
프레임에 독립적으로 동작한다는 것은 어떤 뜻일까.
예시를 들어보자. 두 컴퓨터 A, B가 있고, A는 100FPS, B는 50FPS를 가지고 있다.
이를 바꿔 말하면 A는 1프레임을 연산하는 데 0.01초가 소요되는 반면 B는 0.02초가 소요된다.
이것이 바로 DeltaTime이다.
어떤 수에 DeltaTime을 곱한 값을 연산에 사용한다는 것은 이러한 프레임 차이를 보정하는 것이라 해석할 수 있다.
Tick 함수에서 어떤 값을 1 * DeltaTime
만큼 변경시킨다고 가정하면, A 환경에서는 1 * 0.01
로 0.01만큼 변경되고, B 환경에서는 1 * 0.02
로 0.02만큼 변경된다. 이렇게 변경되는 횟수가 각각 100번, 50번이기 때문에 결과적으로 1초당 변경되는 값은 1로 동일하다.
이로써 프레임 환경이 달라짐에 따라 결과가 달라지지 않게 되었다. 이것을 보고 '프레임에 독립적이다' 라고 할 수 있는 것이다.