1. Create Blueprint Enum

    image.png

  2. Fill Enum with values

    image.png

  3. Create new C++ class

    UCLASS()
    class UClassName : public UUserWidget
    {
    	GENERATED_BODY()
    
    };
    
  4. Create FName property and TArray<FName> property

    UCLASS()
    class UClassName : public UUserWidget
    {
    	GENERATED_BODY()
    
    public:
    	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "CategoryName")
    	TArray<FName> Categories;
    
    	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "CategoryName", meta = (GetOptions = "Categories"))
    	FName Category;
    
    };
    
  5. Create constructor

    UCLASS()
    class UClassName : public UUserWidget
    {
    	GENERATED_BODY()
    	
    	UClassName();
    
    public:
    	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "CategoryName")
    	TArray<FName> Categories;
    
    	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "CategoryName", meta = (GetOptions = "Categories"))
    	FName Category;
    
    };
    
  6. Fill constructor with load code

    UClassName::UClassName()
    {
    	FString EnumPath = TEXT("/SkillTree/Enums/E_SkillTree_Categories.E_SkillTree_Categories"); // 
    
    	UEnum* LoadedEnum = Cast<UEnum>(StaticLoadObject(UEnum::StaticClass(), nullptr, *EnumPath));
    
    	if (LoadedEnum)
    	{
    		for(int32 i = 0; i < LoadedEnum->GetMaxEnumValue(); i++)
    		{
    			Categories.AddUnique(FName(*LoadedEnum->GetDisplayNameTextByIndex(i).ToString()));
    		}
    	}
    	else
    	{
    		UE_LOG(LogTemp, Error, TEXT("Failed to load enum at path: %s"), *EnumPath);
    	}
    }