在 Unreal Engine 的反射系统中,元数据(Metadata) 是用来给类、属性、函数等添加额外描述信息的。它本质上是一些不会直接影响运行逻辑,但会被编辑器、蓝图系统、序列化、文档生成、插件系统等工具使用的标签或注解。
✅ 元数据的作用概述
元数据是“数据的附加说明”,用来告诉 UE 编辑器/蓝图/工具“如何展示”“如何行为”“是否隐藏”等。
📌 常见元数据用途分类
用途类型 | 示例元数据 | 功能说明 |
---|---|---|
编辑器显示控制 | DisplayName 、ToolTip 、ClampMin 、EditCondition | 控制变量在编辑器中的名称、提示、范围、是否可编辑 |
蓝图控制 | BlueprintCallable 、BlueprintType 、HideInBlueprint | 控制蓝图中是否可调用、是否显示 |
属性行为 | ExposeOnSpawn 、SaveGame 、Transient | 控制初始化时是否可赋值、是否参与存档、是否跳过序列化 |
文档与工具辅助 | Category 、Comment 、Keywords | 分组、注释、辅助搜索 |
UI 样式 | SliderMin 、SliderMax 、MultiLine | 控制 UI 类型、输入范围、是否多行文本 |
🧪 示例讲解
1. 编辑器显示优化
UPROPERTY(EditAnywhere, Category="Stats", meta=(DisplayName="最大生命值", ToolTip="角色最大可承受的生命值", ClampMin="0", ClampMax="1000"))
float MaxHealth;
-
DisplayName
:编辑器面板上显示为“最大生命值” -
ToolTip
:鼠标悬浮提示 -
ClampMin
/ClampMax
:在编辑器中限制输入范围
2. 条件编辑(配合 EditCondition
)
UPROPERTY(EditAnywhere) bool bCanFly; UPROPERTY(EditAnywhere, meta=(EditCondition="bCanFly"))
float MaxFlySpeed;
-
MaxFlySpeed
只有在bCanFly == true
时才可编辑。
3. 蓝图可见性控制
UFUNCTION(BlueprintCallable, meta=(DisplayName="发动攻击", Keywords="攻击 战斗"))
void Attack();
-
DisplayName
:在蓝图节点中显示为“发动攻击” -
Keywords
:蓝图搜索栏中输入“攻击”或“战斗”可以找到它
4. 存档控制
UPROPERTY(SaveGame)
int32 CoinCount;
-
标记该属性将在存档系统中自动保存
5. 蓝图构造时可赋值(Spawn 变量)
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ExposeOnSpawn=true))
FString CharacterName;
-
在蓝图中
Spawn Actor from Class
节点时,这个变量可以直接在节点中设置初始值。
🎯 实际应用价值
功能场景 | 是否依赖元数据 | 举例 |
---|---|---|
编辑器美化 | ✅ | 给变量设置中文名、滑块限制 |
蓝图易用性 | ✅ | 优化函数显示名、搜索词 |
存档系统 | ✅ | 标记哪些字段需要保存 |
面板行为控制 | ✅ | 某些变量在特定条件下可编辑 |
自动化工具支持 | ✅ | 自定义规则的插件和 UI |
🧩 总结一句话:
元数据是在 C++ 中对变量和函数进行“附加标注”,让编辑器和蓝图知道“该怎么展示、怎么使用”的机制。
它让 UE 开发从“代码为王”变成了“代码 + 编辑器交互并重”,提升了可视化工作流的效率和可控性。