跳到主要内容

02 - 属性UPROPERTY

本文主要说明了UE5中有关UPROPERTY()的基本概念和一些例子。

UPROPERTY

属性UPROPERTY()使用标准的C++变量声明,并且在上一行添加它的标识符和元数据:

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

数据类型

属性主要用到的数据类型如下:

整型

UE5为我们提供了平台无关的整型类型:uint8uint16uint32uint64,以及对应的有符号版本。

浮点类型

虚幻使用标准C++浮点类型、浮点float和双精度double

布尔类型

布尔类型可以使用C++ bool关键字表示或将整型表示为位域:

uint32 bIsHungry : 1;
bool bIsThirsty;

字符串

UE5支持三种核心类型的字符串:

  • FString是典型的"动态字符数组"字符串类型。
  • FName是对全局字符串表中不可变且不区分大小写的字符串的引用。相较于FString,它的大小更小,更能高效的传递,但更难以操控。
  • FText是指定用于处理本地化的更可靠的字符串表示。

对于大多数情况下,虚幻依靠TCHAR类型来表示字符。TEXT()宏可用于表示TCHAR文字:

MyDogPtr->DogName = FName(TEXT("Samson Aloysius"));

有关字符串的详细内容详见后续系列文章。

属性说明符

即上面提到的specifier,这些属性说明符可以控制属性如何处理引擎和编辑器提供的各项特性:

  • BlueprintReadOnly:蓝图可以读取此属性,但无法修改。
  • BlueprintReadWrite:可以从蓝图读取或写入此属性。
  • Category="TopCategory\|SubCategory\|...":指定在蓝图编辑工具中显示的属性类别。使用|运算符定义嵌套类别。
  • ......

例如想要声明一个能被蓝图只读的整型,可以这样写:

UPROPERTY(BlueprintReadOnly)
int32 MyInt32;

有关全部属性说明符的标签和效果详见这里

元数据说明符

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

需要注意的是,元数据只存在于编辑器中,不要编写能访问到它的游戏逻辑

例如,通过Bitmask让整型在编辑器中变成按位开关的下拉表格:

UPROPERTY(EditAnywhere, Meta = (Bitmask))
int32 BasicBits;

有关全部元数据说明符的标签和效果详见这里

参考资料