본문으로 건너뛰기
Unreal Engine C++ 기초집LESSON 13

Timer와 게임 루프

난이도초급
예상 시간35분
선수지식12강의 함수와 Delegate

13강. Timer와 게임 루프

1. 이번 강의에서 해결할 문제​

적 생성 시간이 됐는지 모든 프레임에 누적 시간을 계산하고 있습니다. 일정 간격 실행과 한 번 지연 실행을 World Timer Manager에 맡깁니다.

2. 학습 목표​

3. 핵심 개념​

Tick은 매 프레임 위치를 부드럽게 갱신하는 작업에 적합합니다. 적 생성, 공격 쿨다운, 일정 간격 AI 판단은 매 프레임 정밀도가 필요하지 않아 Timer가 의도를 더 잘 표현합니다.

Timer도 공짜는 아니며 수천 개의 매우 짧은 Timer는 관리 비용이 생깁니다. 먼저 간단하고 명확한 구조를 선택하고 실제 프로파일링에서 병목이 확인될 때 통합합니다.

4. 단계별 실습​

파일 경로: Source/TopDownSurvival/Systems/EnemySpawner.h

EnemySpawner.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "EnemySpawner.generated.h"

UCLASS()
class TOPDOWNSURVIVAL_API AEnemySpawner : public AActor
{
GENERATED_BODY()

public:
AEnemySpawner();

protected:
virtual void BeginPlay() override;
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;

UPROPERTY(EditAnywhere, Category = "Spawning",
meta = (ClampMin = "0.1", Units = "s"))
float SpawnInterval = 2.0f;

UFUNCTION()
void HandleSpawnTimer();

void RestartSpawnTimer(float NewInterval);

private:
FTimerHandle SpawnTimerHandle;
};

파일 경로: Source/TopDownSurvival/Systems/EnemySpawner.cpp

EnemySpawner.cpp
#include "Systems/EnemySpawner.h"

#include "Engine/World.h"
#include "TimerManager.h"

AEnemySpawner::AEnemySpawner()
{
PrimaryActorTick.bCanEverTick = false;
}

void AEnemySpawner::BeginPlay()
{
Super::BeginPlay();
RestartSpawnTimer(SpawnInterval);
}

void AEnemySpawner::RestartSpawnTimer(float NewInterval)
{
SpawnInterval = FMath::Max(0.1f, NewInterval);
GetWorldTimerManager().ClearTimer(SpawnTimerHandle);
GetWorldTimerManager().SetTimer(
SpawnTimerHandle,
this,
&AEnemySpawner::HandleSpawnTimer,
SpawnInterval,
true,
0.5f);
}

void AEnemySpawner::HandleSpawnTimer()
{
UE_LOG(LogTemp, Display, TEXT("Spawn tick at %.2f"), GetWorld()->GetTimeSeconds());
}

void AEnemySpawner::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
GetWorldTimerManager().ClearTimer(SpawnTimerHandle);
Super::EndPlay(EndPlayReason);
}

5. 코드가 동작하는 이유​

Timer Manager가 World 시간 기준으로 Callback 시점을 관리합니다. FTimerHandle은 등록된 작업을 다시 설정하거나 취소할 식별자입니다. EndPlay에서 해제하면 레벨 종료나 Actor 제거 뒤 실행될 가능성을 명확히 차단합니다.

6. 자주 하는 실수와 해결법​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

Unreal 타이머와 게임 루프 점검

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 12초마다 적을 생성하는 작업에 가장 알맞은 방식은 무엇인가요?
  2. 문제 2액터가 제거될 때 자신이 등록한 반복 타이머는 어떻게 처리해야 하나요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

13강. Timer와 게임 루프 미완료 상태