Unreal Engine/C++

[Unreal Engine 4 C++] Enum의 DisPlayName을 String으로 변환하는 법

한돌이 2021. 5. 19. 17:16

 Enum형에서 DisplayName으로 설정한 값을 화면에 프린트하고 싶을 때 사용하는 방법입니다.

 예제로 사용할 Enum은 다음과 같습니다.

UENUM(BlueprintType)
enum class ECharacterState : uint8
{
	CharacterState_Idle		UMETA(DisplayName = "Idle"),
	CharacterState_Hit		UMETA(DisplayName = "Hit"),
	CharacterState_Dead		UMETA(DisplayName = "Dead")
};

 

 2가지 방법으로 DisplayName을 String으로 변환하는 코드를 작성하겠습니다.

 하나는 하나의 Enum형을 지정하여 DisplayName을 String으로 변환할 것이고, 나머지는 Enum형을 입력하여 해당하는 Enum형의 DisplayName을 String으로 변환하겠습니다.

 

FString UPRStateSystemComponent::GetCharacterStateDisplayToString(ECharacterState NewState) const
{
	const UEnum* CharacterState = FindObject<UEnum>(ANY_PACKAGE, TEXT("ECharacterState"), true);
	if (CharacterState == nullptr)
	{
		return FString("Invalid");
	}

	return CharacterState->GetDisplayNameTextByIndex((int32)NewState).ToString();
}
FString UPRStateSystemComponent::GetEnumdisplayNameToString(const TCHAR * Enum, int32 EnumValue) const
{
	const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, Enum, true);
	if (EnumPtr == nullptr)
	{
		return FString("Invalid");
	}

	return EnumPtr->GetDisplayNameTextByIndex(EnumValue).ToString();
}

 

 일정 버전 이상에서 사용하면 GetEnumName is Deprecated, call GetNameStringByIndex instead라는 경고가 생깁니다. 그럴 경우 GetEnumName 대신 GetNameStringByIndex를 사용하시면 됩니다.

 

 해당 코드를 사용법은 다음과 같습니다.

GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Green, "CurrentState : %s", *GetCharacterStateToString(CurrentState));
GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Green, "CurrentState : %s", *GetEnumToString(TEXT("ECharacterState"), static_cast<uint8>(CurrentState));