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));
'Unreal Engine > C++' 카테고리의 다른 글
[Unreal Engine 4 C++] 델리게이트에서 AddUObject, AddUFunction (0) | 2021.10.14 |
---|---|
[Unreal Engine 4 C++] Timeline에 등록한 Curve 변경하기 (0) | 2021.08.19 |
[Unreal Engine 4 C++] float의 값을 0과 비교할 때 (0) | 2021.05.13 |
[Unreal Engine 4 C++] Delegate에 함수를 추가할 때 주의점 (0) | 2021.04.29 |
[Unreal Engine 4 C++] Delegate (0) | 2021.04.29 |