In many cases this path fits with the following template – “ClassName.EMyEnumType”. But in some cases it doesn’t work. For example:
UEnum::GetValueAsString(TEXT("MyGameMode.EModeExampleEnum"), EGameModeExampleEnum::FIRST)); //it works
UEnum::GetValueAsString(TEXT("MyPlayerController.EControllerExampleEnum"), EControllerExampleEnum::FIRST)); //it works
UEnum::GetValueAsString(TEXT("MyCharacter.ECharacterExampleEnum"), ECharacterExampleEnum::FIRST)); //it crashes
If you look inside the GetValueAsString method, you will see how it works:
UEnum* EnumClass = FindObject<UEnum>(nullptr, EnumPath);
UE_CLOG(!EnumClass, LogClass, Fatal, TEXT("Couldn't find enum '%s'"), EnumPath);
return EnumClass->GetEnumText(Value);
This way to find enum pointer isn’t good for any case. So the best way to find pointer and get enum value as string is:
const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, TEXT("ECharacterExampleEnum"), true);
if (EnumPtr)
{
auto EnumName = EnumPtr->GetEnumName((int32)ECharacterExampleEnum::FIRST);
}
Andrew