그냥 게임개발자

언리얼 Enum DisplayName과 String으로 가져오는 방법 본문

Unreal스터디

언리얼 Enum DisplayName과 String으로 가져오는 방법

sudoju 2024. 1. 1. 16:17

Enum 클래스 새성

UENUM()
enum class ECharacterType : uint8
{
	Player = 1 UMETA(DisplayName = "Player"),
	Monster UMETA(DisplayName = "Monster"),
	Npc UMETA(DisplayName = "Npc"),
};

 

 

Enum의 바이너리 값을 메타데이터 DisplayName의 값을 가져오는 방법

 

// 여기서 Enum의 메타데이터의 정보를 가져와서
// 1번, 2번, 3번이 아닌 메타의 DisplayName이라는 문자열을 출력해보자.
// 이것은 좀 복잡하지만 해보자.

// FindObject라는 API를 사용해서 UEnum을 가져온다.
// 언리얼에서 C++클래스는 Script라는 절대경로를 가짐
// /Script/모듈명(프로젝트 명).Enum명에서 UEnum의 클레스를 가져옴
// Outer의 매개변수는 굳이 필요없으니 nullptr
const UEnum* CharacterEnumType = FindObject<UEnum>(nullptr, TEXT("/Script/프로젝트명.ECharacterType"));
if (CharacterEnumType)
{
	// CardEnumType이 존재하면
	// GetDisplayNameTextByValue라는 함수를 불러 CardType이 uint8이지만 int64만 받기 때문에
	// int64로 형변환을 시켜 그거에 FString으로 변환해 출력
	FString CardMetData = CharacterEnumType->GetDisplayNameTextByValue((int64)ECharacterType::Monster).ToString();
	UE_LOG(LogTemp, Log, TEXT("소유한 카드 종류 %s"), *CardMetData);
}

 

Enum의 직접 String을 가져오는 방법

// ECardType 변수의 메타데이터 말고 문자열로 나오게 하는 방법
// DisplayName이 아닌 Enum의 직접 String을 가져오는 방법이다.
FString CardStringData = UEnum::GetValueAsString(TEXT("프로젝트명.ECharacterType"), ECharacterType::Player);
if (*CardStringData)
{
	UE_LOG(LogTemp, Log, TEXT("소유한 카드 종류 %s"), *CardStringData);
}

'Unreal스터디' 카테고리의 다른 글

컴포지션(Composition)이란?  (0) 2024.01.01
인터페이스란?  (0) 2024.01.01
Assert(어썰트)  (0) 2024.01.01
언리얼 오브젝트 처리  (1) 2024.01.01
리플렉션 시스템이란?  (0) 2024.01.01