Overview
UENUM
- UE4 C++とUnreal C++の列挙型の扱い
CppExampleEnum.h1
2
3
4
5
6
7
8
UENUM(BlueprintType)
enum class ECppExampleEnum : uint8 {
None = 0,
Foo,
Bar
};
对于enum class ECppExampleEnum : uint8
这种写法有些迷惑。
class
是为了使枚举类型更安全。为什么安全,参考下面的链接。之后整理。uint8
是为了指定枚举器的基础类型。
参考链接:
UENUM的一些基础的使用
Convert to Stirng
直接取自引擎代码1
2
3
4
5
6
7
8if (const UEnum* EnumPtr = FindObject<UEnum>(nullptr, TEXT("/Script/PCG.EPCGMedadataCompareOperation"), true))
{
return FName(FString("Compare: ") + EnumPtr->GetNameStringByValue(static_cast<int>(Operation)));
}
else
{
return NAME_None;
}
For-Loop ENUM_RANGE_BY_COUNT()
为定义的枚举类型添加一个For-Loop方便使用的宏。
声明:1
2
3
4
5
6
7
8
9
10
11
12
13#include "Misc/EnumRange.h"
UENUM()
enum class EElementType : uint8
{
Earth,
Fire,
Wind,
Water,
Count UMETA(Hidden)
};
ENUM_RANGE_BY_COUNT(EElementType, EElementType::Count);
使用:1
2
3
4for (EElementType ElementType : TEnumRange<EElementType>())
{
SettingArray.Add(LoadInitialSettings(ElementType));
}
参考文章: