본문 바로가기
언리얼/기능, 팁 등등 노트

[UE4]enum을 string으로(C++)

by 개발펭귄 2018. 11. 24.

로그 출력 등 디버깅 용도로 enum 값을 출력하고 싶을 때가 있다.


1
2
3
4
5
6
7
8
9
FString APlayerCharacter::GetEStateAsString(EStateType EnumValue)
{
    const UEnum* enumPtr = FindObject<UEnum>(ANY_PACKAGE, TEXT("EStateType"), true);
    if (!enumPtr)
    {
        return FString("Invalid");
    }
    return enumPtr->GetNameStringByIndex((int32)EnumValue);
}
cs


이와 같이 쓰면 된다.

enum은 blueprinttype으로 되있어야 한다.


참고로 4.16버전 이전에는 GetEnumName을 썼는데, 그 이상의 버전에서 쓰면 GetEnumName is deprecated, call GetNameStringByIndex instead 라는 문구가 뜬다.


GetNameStringByIndex 를 쓰자.



참고할 Deprecated Functions


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    // Deprecated Functions
    DEPRECATED(4.16, "FindEnumIndex is deprecated, call GetIndexByName or GetValueByName instead")
    int32 FindEnumIndex(FName InName) const { return GetIndexByName(InName, EGetByNameFlags::ErrorIfNotFound); }
 
    DEPRECATED(4.16, "FindEnumRedirects is deprecated, call GetIndexByNameString instead")
    static int32 FindEnumRedirects(const UEnum* Enum, FName EnumEntryName) { return Enum->GetIndexByNameString(EnumEntryName.ToString()); }
 
    DEPRECATED(4.16, "GetEnum is deprecated, call GetNameByIndex instead")
    FName GetEnum(int32 InIndex) const { return GetNameByIndex(InIndex); }
 
    DEPRECATED(4.16, "GetEnumNameStringByValue is deprecated, call GetNameStringByValue instead")
    FString GetEnumNameStringByValue(int64 InValue) const { return GetNameStringByValue(InValue); }
 
    DEPRECATED(4.16, "GetEnumName is deprecated, call GetNameStringByIndex instead")
    FString GetEnumName(int32 InIndex) const { return GetNameStringByIndex(InIndex); }
 
    DEPRECATED(4.16, "GetDisplayNameText with name index is deprecated, call GetDisplayNameTextByIndex instead")
    FText GetDisplayNameText(int32 NameIndex) const { return GetDisplayNameTextByIndex(NameIndex); }
 
    DEPRECATED(4.16, "GetEnumText with name index is deprecated, call GetDisplayNameTextByIndex instead")
    FText GetEnumText(int32 NameIndex) const { return GetDisplayNameTextByIndex(NameIndex); }
 
    DEPRECATED(4.16, "GetEnumTextByValue with name index is deprecated, call GetDisplayNameTextByValue instead")
    FText GetEnumTextByValue(int64 Value) { return GetDisplayNameTextByValue(Value);  }
cs