UENUM(BlueprintType)
enum class ECustomEnum : uint8 {
ValueA UMETA(DisplayName="My Value 1"),
ValueB,
ValueC
};
UENUM(BlueprintType, meta = (Bitflags, UseEnumValuesAsMaskValuesInEditor = "true"))
enum class ECustomBitFlagEnum: uint8
{
BitValueNone = 0,
BitValueA = 1 << 0,
BitValueB = 1 << 1,
BitValueC = 1 << 2
};
ENUM_CLASS_FLAGS(ECustomBitFlagEnum);
// Creating
ECustomBitFlagEnum MyBitFlag = ECustomBitFlagEnum::FlagA | ECustomBitFlagEnum::FlagC;
// Turning On Flag
MyBitFlag |= ECustomBitFlagEnum::FlagB;
// Turning Off Flag
MyBitFlag &= ~ECustomBitFlagEnum::FlagA;
// Checking for Flag
bool bIsFlagActive = (MyBitFlag & ECustomBitFlagEnum::FlagC) == ECustomBitFlagEnum::FlagC;
There are 3 ways to make an enum iterable
// By Count
UENUM(BlueprintType)
enum class ECustomEnum : uint8
{
ValueA,
ValueB,
ValueC,
ValueD,
Count UMETA(Hidden)
};
ENUM_RANGE_BY_COUNT(ECustomEnum, ECustomEnum::Count);
// By First and last
UENUM(BlueprintType)
enum class ECustomEnum : uint8
{
ValueA,
ValueB,
ValueC,
ValueD
};
ENUM_RANGE_BY_FIRST_AND_LAST(ECustomEnum, ECustomEnum::ValueA, ECustomEnum::ValueD);
// By Values
UENUM(BlueprintType)
enum class ECustomEnum : uint8
{
ValueA = 90,
ValueB = 55,
ValueC = 32,
ValueD = 78
};
ENUM_RANGE_BY_VALUES(ECustomEnum, ECustomEnum::ValueA, ECustomEnum::ValueB, ECustomEnum::ValueC, ECustomEnum::ValueD)
To iterate
// Iterate
for (ECustomEnum Value : TEnumRange<ECustomEnum>()) {
GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Red, FString::Printf(TEXT("Enum: %s"), *UEnum::GetValueAsString(Value)));
UE_LOG(LogTemp, Warning, TEXT("Enum: %s"), *UEnum::GetValueAsString(Value));
}