본문 바로가기
[ Unreal5 ]/- 언리얼엔진5 실습

언리얼엔진5 c++ 몇 초 뒤 OpenLevel

by MRG 2025. 1. 24.
728x90
반응형

 

▣ FTimerHandle DoorTimer
FTimerHandle은 Unreal Engine의 타이머를 관리하기 위한 핸들입니다.
역할:
타이머를 식별하고, 특정 타이머를 취소하거나 재설정할 때 사용됩니다.
이 코드에서는 DoorTimer라는 이름의 타이머 핸들을 생성했습니다.
예시 사용법:
타이머 취소: GetWorld()->GetTimerManager().ClearTimer(DoorTimer);
타이머 상태 확인: GetWorld()->GetTimerManager().IsTimerActive(DoorTimer);


▣  GetWorld()->GetTimerManager().SetTimer
SetTimer는 타이머를 설정하여 특정 시간이 지난 후에 함수를 실행하거나 반복 실행하게 만듭니다.

 

▣ GetWorld():현재 게임의 월드(Context)를 가져옵니다.
Unreal Engine에서 모든 게임 오브젝트는 UWorld 컨텍스트 내에서 작동합니다.
타이머는 UWorld의 TimerManager를 통해 관리됩니다.


▣ GetTimerManager():
UWorld에 포함된 TimerManager 객체를 가져옵니다.
이 객체는 타이머 생성, 관리, 취소 등을 담당합니다.


▣ SetTimer 함수:
SetTimer(FTimerHandle& InHandle, TFunction<void()> InDelegate, float InRate, bool InLoop);
InHandle: 타이머를 식별하기 위한 핸들 (DoorTimer).
InDelegate: 실행할 함수 (람다 함수).
InRate: 타이머 실행 시간 (초 단위).
InLoop: 반복 실행 여부 (false: 한 번만 실행, true: 반복 실행).


▣  DoorTimer (타이머 핸들 전달)
타이머 핸들인 DoorTimer를 SetTimer에 전달했습니다.
이 핸들은 타이머를 추적하거나 관리하는 데 사용됩니다.
예를 들어, 타이머를 취소하려면 다음과 같이 호출합니다:
GetWorld()->GetTimerManager().ClearTimer(DoorTimer);


▣ 람다 함수 this
람다 함수는 익명 함수로, 코드의 간결성을 높이고 특정 작업을 인라인으로 정의할 수 있게 합니다.

형식:
[this]: 현재 객체의 멤버 변수 및 함수를 람다 함수 내에서 사용할 수 있게 캡처.

 

▣ 예: [캡처 리스트]() { 람다 함수 내용 };

 

예: UGameplayStatics::OpenLevel(this, TEXT("Chapter0"))에서 this를 사용하려면 [this]를 캡처해야 함.
캡처 리스트가 없으면 람다 함수 안에서 this를 사용할 수 없습니다.
람다 함수의 역할:
SetTimer에서 2초 뒤 실행될 작업을 람다 함수로 정의했습니다.
이 경우, 레벨 "Chapter0"로 전환하는 작업을 수행합니다.


▣ UGameplayStatics::OpenLevel
UGameplayStatics::OpenLevel은 지정한 레벨로 전환하는 함수입니다.
형식:
UGameplayStatics::OpenLevel(UObject* WorldContextObject, FName LevelName, bool bAbsolute = true);
WorldContextObject: 현재 실행 중인 월드 객체 (일반적으로 this).
LevelName: 전환할 레벨의 이름 (FName 형식).
bAbsolute: true일 경우 로컬 네트워크 정보를 초기화하고, false일 경우 유지.
TEXT("Chapter0"):
Unreal Engine의 FName은 문자열로 표현되며, TEXT 매크로를 사용해 문자열을 UTF-16로 변환합니다.


▣ 2.0f (2초 뒤 실행)
타이머가 실행되기까지의 지연 시간을 초 단위로 설정합니다.
여기서 2.0f는 2초 뒤에 람다 함수가 실행됨을 의미합니다.


▣  false (반복 실행 여부)
이 매개변수는 타이머가 반복 실행될지 여부를 설정합니다.
true: 지정된 시간 간격으로 반복 실행.
false: 한 번만 실행.
이 코드에서는 단발성으로 실행되므로 false로 설정했습니다.


▣ 전체 코드 동작 요약
FTimerHandle DoorTimer를 생성하여 타이머를 관리할 준비를 합니다.
GetWorld()->GetTimerManager().SetTimer를 호출하여 타이머를 설정합니다:
2초 후에 람다 함수 실행.
람다 함수에서 UGameplayStatics::OpenLevel을 호출하여 "Chapter0" 레벨로 전환.
false로 설정했으므로 타이머는 한 번만 실행됩니다.
2초 후에 새로운 레벨이 로드됩니다.

728x90
반응형

댓글