UE4 C++:UPROPERTY宏、属性说明符、元数据说明符

目录

属性声明

属性说明符

VisibleDefaultsOnly:仅在Class Defaults可见

VisibleInstanceOnly:仅在实例化Detail可见

EditInstanceOnly:可通过属性窗口进行编辑,但只能在实例上进行,不能在原型上进行

VisibleAnywhere:Class Defaults 和 实例化 Detail 可见

EditDefaultsOnly:仅在 Class Defaults 可编辑

EditAnywhere:Class Defaults 和 实例化 Details 可编辑

BlueprintReadOnly:蓝图只读,只能Get

BlueprintReadWrite:蓝图读写,Get和Set

Category 类别

BlueprintAssignable:蓝图中可绑定委托

元数据说明符meta

DisplayName 别名

EditCondition 条件可编辑

UMETA 扩展宏


属性声明

用于UE反射系统,属性使用C++变量语法声明,前面用UPROPERTY()宏来定义属性元数据和变量说明符

UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])
Type VariableName;

示例

UENUM(BlueprintType)
enum class EColorBits1 :uint8
{
	ECB_Red,
	ECB_Green,
	ECB_Blue,
};

//使用"bitflags"元标记来创建UENUM,实际使用似乎没差别
UENUM(BlueprintType, Meta = (Bitflags))
enum class EColorBits2 :uint8
{
	ECB_Red,
	ECB_Green,
	ECB_Blue,
};

属性说明符

控制属性与引擎和编辑器的相处方式

常用说明符:

VisibleDefaultsOnly:仅在Class Defaults可见

UPROPERTY(VisibleDefaultsOnly)
	int32 VisibleDefaultsOnlyInt;

VisibleInstanceOnly:仅在实例化Detail可见

UPROPERTY(VisibleInstanceOnly)
	FVector VisibleInstanceOnlyVector;

EditInstanceOnly:可通过属性窗口进行编辑,但只能在实例上进行,不能在原型上进行

VisibleAnywhere:Class Defaults 和 实例化 Detail 可见

UPROPERTY(VisibleAnywhere)
	FString VisibleAnywhereString;

EditDefaultsOnly:仅在 Class Defaults 可编辑

UPROPERTY(EditDefaultsOnly)
	int32 EditDefaultsOnlyInt;

EditAnywhere:Class Defaults 和 实例化 Details 可编辑

UPROPERTY(EditAnywhere)
	FString EditAnywhereString;

BlueprintReadOnly:蓝图只读,只能Get

UPROPERTY(BlueprintReadOnly)
	int32 intValue_BlueprintReadOnly;

BlueprintReadWrite:蓝图读写,Get和Set

UPROPERTY(BlueprintReadWrite)
	int32 intValue_BlueprintReadWrite;

Category 类别

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TopCategory")
	int32 intValue1;

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "TopCategory|SubCategory")
	int32 intValue2;

BlueprintAssignable:蓝图中可绑定委托

DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FNotifyPawnChange, float, PawnHpPercent, float, PawnPhysicalShieldPercent, float, PawnMageShieldPercent);

//蓝图中可绑定委托
UPROPERTY(BlueprintAssignable)
	FNotifyPawnChange NotifyPawnChange;

元数据说明符meta

声明类、接口、结构体、列举、列举值、函数,或属性时,可添加 元数据说明符 来控制其与引擎和编辑器各方面的相处方式。每一种类型的数据结构或成员都有自己的元数据说明符列表

常见说明符

DisplayName 别名

  • 可以便于蓝图变量搜索,如果变量名不好记的话

EditCondition 条件可编辑

UPROPERTY(EditAnywhere,BlueprintReadWrite, meta = (DisplayName="UseOffset1、2 标志位") )
	bool bUseOffset;

UPROPERTY(EditAnywhere, meta = (DisplayName = "ContitionValue 控制 offset3"))
	int32 ContitionValue;

UPROPERTY(EditAnywhere, meta = (DisplayName = "ContitionColorBits 控制 offset4"))
	EColorBits1 ContitionColorBits;

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "bUseOffset"))
	float Offset1;

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "!bUseOffset"))
	float Offset2;

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "ContitionValue>0"))
	float Offset3;

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "ContitionColorBits==EColorBits1::ECB_Green"))
	float Offset4;

UMETA 扩展宏

  • cpp meta里的中文在蓝图经常会乱码
    • 解决方法一:高级保存选择 Unicode 65001
    • 解决办法二:使用UMETA中的DisplayName
  • 可用于Enum的元素别名
  • 可用于结构体的元素别名
  • 可用于Datatable的别名
UPROPERTY(EditAnywhere)
	FName ChineseName UMETA(DisplayName="中文名");

UPROPERTY(EditAnywhere)
	float Weight UMETA(DisplayName = "体重") = 65.0f;

UPROPERTY(EditAnywhere)
	EColorBits1 FavoriteColorBits UMETA(DisplayName = "最喜欢的颜色")=EColorBits1::ECB_Blue;

参考链接: 

Unreal Engine UProperties | 虚幻引擎5.0文档

【UE4 C++ 基础知识】<1> UPROPERTY宏、属性说明符、元数据说明符 - 砥才人 - 博客园 (cnblogs.com)

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值