StoneのBLOG

生活这种事情,从来都是自我陶醉

0%

UE5中的ENUM

UE中的枚举使用方法整理

Overview

UENUM

对于enum class ECppExampleEnum : uint8这种写法有些迷惑。

  • class是为了使枚举类型更安全。为什么安全,参考下面的链接。之后整理。
  • uint8是为了指定枚举器的基础类型。

参考链接:

UENUM的一些基础的使用

Convert to Stirng

直接取自引擎代码

1
2
3
4
5
6
7
8
if (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
4
for (EElementType ElementType : TEnumRange<EElementType>())
{
SettingArray.Add(LoadInitialSettings(ElementType));
}

参考文章: