[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

Leave a Reply

Your email address will not be published. Required fields are marked *