由于c++11新增了强枚举,因此UE5中枚举分为经典枚举和强枚举两种写法
经典枚举
定义
cpp
UENUM()
namespace EAutoReceiveInput
{
enum Type //这里就是普通的c++枚举
{
Disabled,
Player0,
Player1,
Player2,
Player3,
Player4,
Player5,
Player6,
Player7,
};
}
声明变量
cpp
UPROPERTY(EditAnywhere)
TEnumAsByte<EAutoReceiveInput::Type> AutoPossessPlayer;//必须用TEnumAsByte声明,这个一个包装器,将枚举转化为8字节整数,因为蓝图无法处理枚举类型,只能处理数字,注意<>里是命名空间和枚举类型
调用
cpp
AutoPossessPlayer = EAutoReceiveInput::Player0;//等号左边是包装器,右边直接用命名空间调用枚举值,注意命名空间后没有跟枚举类型
enum class 强枚举
定义
cpp
UENUM(BlueprintType)//必须写上BlueprintType,这是固定写法,告诉编译器这个枚举可以在蓝图使用
enum class EMyState : uint8 //强枚举需要加上class关键字, uint8是指定数据结构,经典枚举和强枚举默认是都int,但强枚举可以手动指定为uint8,只占1个字节,UE也推荐写为uint8
{
Idle,
Walk,
Run
};
声明变量
cpp
UPROPERTY(EditAnywhere)
EMyState CurrentState;
调用
cpp
CurrentState = EMyState::Idle;//直接用枚举名::枚举值