UE5 C++ 两种枚举

由于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;//直接用枚举名::枚举值
相关推荐
FQNmxDG4S19 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
前端老石人19 小时前
HTML 字符引用完全指南
开发语言·前端·html
matlab_xiaowang20 小时前
Redux 入门:JavaScript 可预测状态管理库
开发语言·javascript·其他·ecmascript
虹科网络安全20 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje20 小时前
Java语法进阶
java·开发语言·jvm
汉克老师20 小时前
GESP2025年3月认证C++五级( 第三部分编程题(1、平均分配))
c++·算法·贪心算法·排序·gesp5级·gesp五级
老前端的功夫20 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_4352879220 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
止语Lab21 小时前
从手动到框架:Go DI 演进的三个拐点
开发语言·后端·golang
yaoxin52112321 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python