UnrealEngine/개념

Delta Time

K.DJ 2022. 9. 13. 13:43

 언리얼 엔진의 C++ 클래스에서 AddActorLocalOffset, 혹은 SetActorLocation 함수는 해당 액터의 로케이션 값을 변경할 수 있다.

 단순 로케이션 변경이라는 결과를 도출할때는 적합하지만 캐릭터의 이동과 같은 부드러운 로케이션의 변경을 위해선 Tick 함수나 축 매핑에 바인딩하여 사용하여야 한다. 이렇게 사용했을 때 액터의 움직임을 변경하는 함수는 매 프레임=Frame 마다 호출되게 된다.

 

 하지만 이렇게 구현을 했을 때 캐릭터의 이동하는 거리(=함수의 호출 빈도)가 프레임에 종속되어버린다.

 

 Tick 함수에 특정 액터를 1만큼 이동하도록 구현했다고 해보자

FPS에 따른 이동거리의 차이

 30fps(초당 프레임)의 성능을 보장하는 A 컴퓨터와 60fps의 성능을 보장하는 B 컴퓨터가 있을때, 동일한 코드일지라도 A컴퓨터가 30만큼 이동했다면, B컴퓨터는 60만큼 이동하는 결과가 나올 것이다.

 

FPS가 보장될때의 A 컴퓨터에서의 이동
FPS가 요동칠때 A 컴퓨터에서의 이동

 또한 fps가 요동친다면 같은 하드웨어 에서도 항상 동일한 이동거리가 나오지 않을 수도 있다.

 

 

 이러한 상황에서 해당 기능을 프레임에 대해 종속되지 않도록 해주는 것이 바로 Delta Time이다.

 Delta Time의 정의는 '바로 전 프레임을 수행하는 데 걸린 내부 시간'이다.

 

 기존에 Tick에서, 즉 프레임마다 액터를 1씩 이동시켰다면 이젠 1이라는 이동거리에 Delta Time을 곱해서 프레임이 작동한 시간에 따라 보정을 시켜준다.

 이렇게 Delta Time을 곱해주면 FPS가 높든 낮든, 최종적으로 출력된 Frame의 갯수가 몇개든 상관없이 해당 프레임이 작동된 시간에 따라 이동거리가 달라지므로 fps에 종속되지 않는, 항상 동일한 이동거리를 보장하는 결과를 볼 수 있다.

 

 

Delta Time을 사용하여 이동거리를 보정한 함수의 예시(축 매핑에 바인딩된 함수임)