UE中BlueprintGetter与BlueprintSetter属性说明符的作用是什么?
关于UE中
BlueprintGetter和BlueprintSetter的实际意义 先看一段C++代码示例:
private: // UPROPERTY(BlueprintGetter=GetHealth, BlueprintSetter=SetHealth) ????? int32 Health; public: UFUNCTION(BlueprintPure) int32 GetHealth() const { return Health; } UFUNCTION(BlueprintCallable) void SetHealth(int32 InHealth) { this->Health = InHealth; }
两种使用场景的差异
- 不添加
BlueprintGetter/BlueprintSetter时:私有变量Health在蓝图中不可直接访问,只能通过GetHealth()和SetHealth()函数间接读写,完全符合面向对象的封装设计逻辑。 - 添加该说明符后:蓝图中可以像操作公共变量一样直接访问
Health,但这并不是直接绕过封装读写私有变量内存,底层实际上还是调用你定义的GetHealth()和SetHealth()函数。
BlueprintGetter和BlueprintSetter的实际意义
- 提升蓝图开发效率:蓝图开发者无需手动拖出Getter/Setter节点,直接通过变量引用就能完成读写,操作更直观便捷,同时又能保证执行C++层定义的逻辑(比如你可以在
SetHealth里加入数值范围校验、触发血量变化事件等)。 - 兼容蓝图变量系统特性:可以在蓝图的细节面板中直接编辑该变量数值(支持编辑时/运行时修改),还能利用蓝图变量的复制、序列化等特性,同时不破坏C++层的封装规则。
- 统一跨层访问逻辑:无论在C代码还是蓝图中,读写
Health的逻辑都是一致的,避免了蓝图直接操作变量而绕过C层业务规则的问题。
内容的提问来源于stack exchange,提问作者orange
相关产品推荐
相关产品推荐

