[UE4] UEnum에 정의된 값 루프로 돌리기(Iteration on UEnum in C++)
UEnum을 정의하고, 그 값들을 iteration하여 로그로 찍어보았다.
아래와 같이 EFruit을 정의한다.
UENUM()
enum class EFruit: uint8
{
apple UMETA(DisplayName = "apple"),
banana UMETA(DisplayName = "banana"),
kiwi UMETA(DisplayName = "kiwi"),
cherry UMETA(DisplayName = "cherry")
};
FindObject를 이용하여, 엔진 내부에 생성된 오브젝트에 접근한다. 그 후 NumEnums() 함수로 enum 개수를 가져오고, GetValueByIndex()를 통해 enum 값을 가져온다. GetNameByIndex()로 enum의 스트링 값도 가져올 수 있다.
const UEnum* enumPtr = FindObject(ANY_PACKAGE, TEXT("EFruit"), true); if (enumPtr != nullptr) { for (int i = 0; i < enumPtr->NumEnums(); i++) { EFruit enumValue = (EFruit)(enumPtr->GetValueByIndex(i)); UE_LOG(LogTemp, Log, TEXT("> %s"), *enumPtr->GetNameByIndex(i).ToString()); } }
출력된 값은 아래와 같다.
> EFruit::apple
> EFruit::banana
> EFruit::kiwi
> EFruit::cherry