게임 시작 전 카운트다운을 구현하기 위해 타이머를 설정해봅시다.
우선 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 |