언리얼 엔진5

[UE5] 타이머 설정하기

ws3319 2025. 3. 27. 22:49

게임 시작 전 카운트다운을 구현하기 위해 타이머를 설정해봅시다.

 

우선 Player Controller가 필요하므로 ToonTanksPlayerController라는 class를 미리 만들었습니다. 그리고 GameMode class에서 다음과 같이 구현하였습니다.

 

Actor 선언과 초기화

<TanksGameMode.h>
private:
	class ATank* Tank;

	class AToonTanksPlayerController* ToonTanksPlayerController;
<TanksGameMode.cpp>
#include "Kismet/GameplayStatics.h"

void ATanksGameMode::BeginPlay() {
	Super::BeginPlay();

	Tank = Cast<ATank>(UGameplayStatics::GetPlayerPawn(this, 0)); // player 0 불러오기
	TanksPlayerController = UGameplayStatics::GetPlayerController(this, 0);

...

우선 다음과 같이 플레이어의 pawn인 Tank와 Player Controller를 선언하고 초기화해줍니다. player의 pawn을 불러오는 function인 UGameplayStatics::GetPlayerPawn은 APawn* type 객체를 반환하므로 이를 ATank type에 맞게 Casting해줍니다.

 

 

타이머 설정하기

if (ToonTanksPlayerController == nullptr)
	return;

FTimerHandle PlayerEnableTimerHandle;
FTimerDelegate PlayerEnableTimerDelegate = FTimerDelegate::CreateUObject(
	ToonTanksPlayerController,
	&AToonTanksPlayerController::SetPlayerEnabledState,
	true
);

타이머를 설정하기 위해 FTimerHandle type 객체와 FTimerDelegate type 객체가 필요합니다.
FTimerDelegate::CreateUObject를 통해 AToonTanksPlayerController::SetPlayerEnabledState 함수와 바인딩binding하여 딜레이가 끝난 뒤 실행되도록 해줍니다.

저는 처음에는 플레이어의 input을 막아놓고, 타이머가 끝난 뒤 풀어지도록 했습니다.

#include "TimerManager.h"

GetWorldTimerManager().SetTimer(
	PlayerEnableTimerHandle,
	PlayerEnableTimerDelegate,
	StartDelay,
	false
);

그리고 GetWorldTimerManager()->SetTimer()를 작성해줍니다. parameters는 앞서 만든 FTimerHandle, FTimerDelegate 객체를 전달해주고, 딜레이를 몇 초 수행할 것인지 전달해줍니다. 마지막 bool type 변수는 반복 수행할 것인지를 나타냅니다. 여기서는 StartDelay만큼 시간이 지난 뒤에 앞서 바인딩했던 함수가 실행될 것입니다.

 

타이머를 통해 게임 시작 전 카운트다운하는 방법을 알아보았습니다.

'언리얼 엔진5' 카테고리의 다른 글

[UE5] 무기 장착하기  (0) 2025.03.27
[UE5] C++ 클래스에서 컴포넌트 구성하기  (0) 2025.03.27
[UE5] 플레이어 감지  (0) 2025.03.27