UPROPERTY的再次学习
一.简述UPROPERTY
以往我们经常使用UPROPERTY来,对蓝图公开设置权限。我们跟着官方文档来理一下,查缺补漏具体的细节。或者说变量在蓝图和编辑器下,以哪种方式显示,其实构成也不复杂如下,就两个组成。
UPROPERTY([变量说明符specifier,....],[元数据meta,....]) 可叠加。
UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])Type VariableName;
然后是虚幻整数类型,uint8
UE5.3蓝图里,支持的只有三个。分别是uint8,int32,int64;
让后我们可以使用的,
二.位掩码
属性Meta 元数据加上(BitMask)。函数也能,只是在参数前多加UPARAM(meta = (Bitmask))
/*~ BasicBits appears as a list of generic flags in the editor, instead of an integer field. */UPROPERTY(EditAnywhere, Meta = (Bitmask)) int32 BasicBits;/*~ You can set MyFunction using a generic list of flags instead of typing in an integer value. */ UFUNCTION(BlueprintCallable) void MyFunction(UPARAM(meta = (Bitmask)) int32 BasicBitsParam);
三.基于位掩码的 更高用法。自定义位标记名称
他们不在时Flag1。也是可以相互存在的状态量。
UseEnumValuesAsMaskValuesInEditor 应该是可以自己赋值,比如ECB_Blue 是16,而不用默认定好的Bit位1,2,4。直接拿源码举例看
测试
UENUM(Meta = (Bitflags, UseEnumValuesAsMaskValuesInEditor = "true"))
enum class EColorBits1
{ ECB_Red = 0x01, ECB_Green = 0x02, ECB_Blue = 0x04
};
ENUM_CLASS_FLAGS(EColorBits1);
UENUM(Meta = (Bitflags))
enum class EColorBits2
{ ECB_Red,ECB_Green,ECB_Blue
};
/*~ This property lists flags matching the names of values from EColorBits. */ UPROPERTY(EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits1")) int32 ColorFlags;UPROPERTY(EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits2"))int32 ColorFlags2;
同样函数也可以用这些枚举
/*~ MyOtherFunction shows flags named after the values from EColorBits. */ UFUNCTION(BlueprintCallable) void MyOtherFunction(UPARAM(meta = (Bitmask, BitmaskEnum = "EColorBits1")) int32 ColorFlagsParam);UFUNCTION(BlueprintCallable)void MyOtherFunction2(UPARAM(meta = (Bitmask, BitmaskEnum = "EColorBits2")) int32 ColorFlagsParam);
四.其余的数字类型,加上UPEROPERTY。都能反射到蓝图。
五.属性说明符
5.5的文档基本都翻译了
我们记录一下常用的
用于多播代理,事件分发器用于绑定。
编辑器权限
与网络相关
存档 序列化
六. 元数据 标签
命名
案例,禁用
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "WX")bool bEdite = false;UPROPERTY(BlueprintReadWrite,EditAnywhere,Category = "WX",meta = (EditCondition = "bEdite"))FString EditString = TEXT("我是字符串String");
生成时暴露出来
七. 二维数组,如何暴露到蓝图
结构体里有 暴露好的数组,再组成它的数组。
USTRUCT(BlueprintType)
struct FStruArray
{GENERATED_USTRUCT_BODY();UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "WX")TArray<FString> MyStrArray;
};
UPROPERTY(BlueprintReadWrite,EditAnywhere,Category = "WX")TArray<FString> MyStrArray;//二维数组UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "WX")TArray<FStruArray> MyStruArray;