Unreal

Unreal에서 Tick의 DeltaTime과 Transform 조정

(ꐦ •᷄ࡇ•᷅) 2025. 1. 23. 09:58

Transform

액터의 위치, 회전, 크기를 제어하는 컴포넌트이다.

 

  • 위치, 스케일: FVector(x, y, z)로 표현됨.
  • 회전(중요!): FRotator(Pitch, Yaw, Roll)로 표현됨.
더보기
  • Pitch -> y축으로 회전
  • Yaw -> z축으로 회전
  • Roll -> x축으로 회전

Tick

게임 프레임 업데이트와 Tick

언리얼 엔진은 게임 실행 중 매 프레임마다 여러 작업을 수행한다.

특정 액터가 "매 프레임마다" 수행할 로직이 있다면, 언리얼 엔진은 그 액터의 Tick 함수를 매 프레임 호출해준다.

  • 렌더링: 화면 그리기
  • 물리 연산: 충돌/중력/마찰 등 물리 엔진 처리
  • 오브젝트 업데이트: 게임 내 액터들의 상태 갱신

Tick 함수 활성화하기

액터를 생성할 때 기본적으로 Tick 함수를 사용하려면, 아래와 같이 생성자에서 설정해야 한다.

PrimaryActorTick.bCanEverTick = true;

 

bCanEverTick이 false이면 엔진은 성능 최적화를 위해 해당 액터의 Tick을 호출하지 않는다.

불필요한 Tick 호출은 성능에 부담을 줄 수 있으므로, 사용하지 않는다면 false를 명시하여 최적화 효과와 코드 명확성을 높여야 한다.


DeltaTime이란?

Tick(float DeltaTime)에서 DeltaTime은 "직전 프레임부터 현재 프레임까지 걸린 시간(초)"이다. 

 

예)

  • 60 FPS 환경: DeltaTime -> 1/60초 -> 약 0.0167초
  • 120 FPS 환경: DeltaTime -> 1/120초 -> 약 0.0083초

프레임 레이트가 높을수록 DeltaTime이 작아지고, 낮을수록 DeltaTime이 커진다.

 

DeltaTime을 이용한 프레임 독립적인 움직임

단순히 매 프레임마다 X 좌표를 증가시키면 FPS가 높을수록 더 빨리 움직여 게임 체감 속도가 달라진다.

이를 방지하려면 DeltaTime을 곱해서 초 단위 기준으로 이동/회전을 계산해야 한다.

 

예) 초당 100만큼 이동하고 싶다면, 100 * DeltaTime을 매 프레임마다 더해 줌

 

  • 60 FPS -> 한 프레임 당 1.67씩 이동, 60 프레임 곱하면 100
  • 120 FPS -> 한 프레임 당 0.83씩 이동, 120 프레임 곱하면 100

이처럼 어느 FPS 환경에서도 동일한 실제 속도를 유지할 수 있다.