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
0 / 2Unreal 타이머와 게임 루프 점검
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
13강. Timer와 게임 루프 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.