Tick 함수

김민수·2025년 1월 22일

언리얼 C++

목록 보기
14/32

1. Tick 함수 활성화

Tick 함수는 기본적으로 비활성화되어 있다. 이를 활성화하려면 액터 생성자에서 아래와 같이 설정해야 한다:

PrimaryActorTick.bCanEverTick = true;
  • bCanEverTick: true로 설정 시, 엔진이 매 프레임 Tick 함수를 호출한다.
  • 필요하지 않은 경우 bCanEverTick = false로 설정해서 불필요한 Tick 호출을 방지한다.

2. DeltaTime이란?

  • DeltaTime은 직전 프레임과 현재 프레임 사이의 시간(초)을 의미한다.
  • DeltaTime의 값은 프레임 레이트(FPS)에 따라 달라진다:
    • 60 FPS → DeltaTime ≈ 0.0167초 (1/60초)
    • 120 FPS → DeltaTime ≈ 0.0083초 (1/120초)

이를 통해, 프레임 간 시간 차이를 반영한 로직을 작성할 수 있다.


3. 프레임 간 시간 차이를 반영한 로직

(1) 문제점: 프레임 의존적 로직

FVector NewLocation = GetActorLocation();
NewLocation.X += 1;
SetActorLocation(NewLocation);
  • 60 FPS: 초당 60만큼 이동
  • 120 FPS: 초당 120만큼 이동

이처럼 FPS에 따라 움직임 속도가 달라지는 문제가 발생한다. 이는 프레임 의존적 로직의 단점이다.

(2) DeltaTime을 활용한 해결책

DeltaTime을 활용하면 프레임 독립적 로직을 구현할 수 있다. 예를 들어, 액터가 초당 100만큼 이동하려면:

FVector NewLocation = GetActorLocation();
NewLocation.X += 100 * DeltaTime;
SetActorLocation(NewLocation);
  • 60 FPS: 한 프레임당 100 * 0.0167 = 1.67씩 이동
  • 120 FPS: 한 프레임당 100 * 0.0083 = 0.83씩 이동

결과적으로 FPS에 관계없이 동일한 속도로 움직인다.


4. Tick 함수 사용 시 주의사항

  1. Tick 함수는 성능에 영향을 미친다.

    • 다수의 액터가 Tick을 사용하는 경우, 성능 저하가 발생할 수 있다.
    • 해결 방안: SetActorTickEnabled(false)로 필요 시 Tick을 비활성화해야 한다.
  2. 불필요한 연산을 피해야 한다.

    • 매 프레임 수행되는 연산은 반드시 최적화해야 한다.
    • 변화가 없는 값은 캐싱해두고 재사용한다.
profile
안녕하세요

0개의 댓글