본문으로 건너뛰기
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와 게임 루프 미완료 상태