Unreal Engine通过UCLASS、UPROPERTY和UFUNCTION等反射宏,将C++类、属性和函数暴露给引擎反射系统与蓝图编辑器,实现可视化编辑和脚本交互。GENERATED_BODY()宏必须置于类定义起始处。
Unreal Engine中宏定义语法的使用
示例代码:
| |
关键宏参数详解:
UCLASS 常用参数:
| 参数 | 作用 |
|---|---|
| Blueprintable | 允许基于此类创建蓝图 |
| BlueprintType | 允许在蓝图中作为变量类型使用 |
| NotBlueprintable | 明确禁止蓝图继承(默认) |
| meta=(DisplayName) | 编辑器显示名称 |
UPROPERTY 常用参数:
| 参数 | 作用 |
|---|---|
| VisibleAnywhere | 属性可见但不可编辑 |
| EditAnywhere | 属性可任意编辑 |
| EditDefaultsOnly | 仅允许在类默认值中编辑 |
| BlueprintReadOnly | 蓝图只读访问 |
| Category | 属性分类(编辑器分组) |
| meta=(ClampMin=0) | 元数据:限制最小值 |
UFUNCTION 常用参数:
| 参数 | 作用 |
|---|---|
| BlueprintCallable | 可从蓝图调用 |
| BlueprintPure | 纯函数(无副作用) |
| Category | 函数分类 |
| meta=(Deprecated) | 标记为已弃用 |
特殊说明:
GENERATED_BODY()必须:- 放在类定义的最开始位置
- 每个反射类必须有且仅有一个
- 展开后包含类型标识符等关键信息
命名规范要求:
- 反射类必须以
U开头(如UMyObject) - 非反射类不应使用
U前缀
- 反射类必须以
继承规则:
1 2 3 4 5 6 7 8// 正确:继承自UObject派生类 class UMyActor : public AActor { GENERATED_BODY() // ... }; // 错误:不能直接从非UObject继承 class UInvalidClass : public std::enable_shared_from_this { /*...*/ };
这些宏共同构成了Unreal的反射系统基础,使C++类能够与蓝图编辑器、序列化系统等引擎功能无缝交互。