UPROPERTY
是虚幻引擎反射系统的核心宏,用于声明类成员变量并赋予其特殊属性。
主要UPROPERTY特性参数分类
1. 网络复制相关
Replicated
: 标记属性将从服务器复制到客户端
ReplicatedUsing = 函数名
: 属性复制到客户端后会调用指定的回调函数
NotReplicated
: 显式标记不复制(用于覆盖父类设置)
2. 编辑器可见性
EditAnywhere
: 所有实例可编辑
EditDefaultsOnly
: 仅原型(CDO)可编辑
EditInstanceOnly
: 仅实例可编辑
VisibleAnywhere
: 所有地方可见但不可编辑
VisibleDefaultsOnly
: 仅原型可见
VisibleInstanceOnly
: 仅实例可见
3. 蓝图交互
BlueprintReadWrite
: 蓝图可读写
BlueprintReadOnly
: 蓝图只读
BlueprintAssignable
: 用于多播委托,可在蓝图中订阅
BlueprintCallable
: 用于单播委托,可在蓝图中调用
BlueprintAuthorityOnly
: 只在服务器上运行的代码可访问
4. 序列化控制
SaveGame
: 属性会在保存游戏时序列化
Transient
: 不会被序列化(不保存)
Config
: 可从配置文件加载
DuplicateTransient
: 复制对象时不会复制此属性
5. 高级特性
Meta=(参数列表)
: 提供元数据,如
Meta=(AllowPrivateAccess="true")
: 允许私有成员在蓝图中访问
Meta=(ClampMin="0.0", ClampMax="1.0")
: 值的范围限制
Meta=(EditCondition="bEnableSomething")
: 条件编辑
Category="分类名"
: 在编辑器中的分类
Instanced
: 对象被视为外部对象的一部分,而不是独立对象
6. 网络相关优先级
ReplicationCondition = COND_XXX
: 复制条件
UPROPERTY(ReplicatedUsing=OnRep_X, RepNotify=XXX)
: 复制通知选项
示例代码
// 基本复制
UPROPERTY(Replicated)
float Health;
// 复制带回调
UPROPERTY(ReplicatedUsing=OnRep_CurrentHealth)
float CurrentHealth;
// 回调函数实现
UFUNCTION()
void OnRep_CurrentHealth();
// 复制带元数据控制
UPROPERTY(Replicated, Meta=(ClampMin="0.0", ClampMax="100.0"))
float Stamina;
官方文档链接
拓展提示
在GAS系统中,利用ReplicatedUsing
属性可以精确控制何时更新客户端的属性值,并在客户端属性值变化时触发特定逻辑,比如UI更新、特效播放等。