UE_C++ —— Properties
目录
一,Property Declaration
二,核心数据类型
Integers
Floating Point Types
Boolean Types
Strings
三,Property Specifiers
四,Metadata Specifiers
一,Property Declaration
Properties 属性使用标准的C++变量语法声明,前面用 UPROPERTY 宏来定义属性变量说明符和元数据;
UPROPERTY([specifier, specifier, ...], [meta(key = value, key = value, ...)])
Type VariableName;
二,核心数据类型
Integers
- uint8、uint16、uint32、uint64
- int8、int16、int32、int64
-
As Bitmasks,元标记可使整数作为下拉列表形式可供编辑;
/*~ 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)
//自定义bitflags名称
UENUM(Meta = (Bitflags))
enum class EColorBits
{
ECB_Red,
ECB_Green,
ECB_Blue
};
//将定义好的枚举转化为bitmask
UENUM(Meta = (Bitflags, UseEnumValuesAsMaskValuesInEditor = "true"))
enum class EColorBits
{
ECB_Red = 0x01,
ECB_Green = 0x02,
ECB_Blue = 0x04
};
ENUM_CLASS_FLAGS(EColorBits);
//定义好后引用
/*~ This property lists flags matching the names of values from EColorBits. */
UPROPERTY(EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits"))
int32 ColorFlags;
/*~ MyOtherFunction shows flags named after the values from EColorBits. */
UFUNCTION(BlueprintCallable)
void MyOtherFunction(UPARAM(meta = (Bitmask, BitmaskEnum = "EColorBits")) int32 ColorFlagsParam)
Floating Point Types
- float
- double
Boolean Types
- 可使用C++ bool关键字或位域;
uint32 bIsHungry : 1;
bool bIsThirsty;
Strings
支持三种核心类型的字符串:
- FString 是典型的"动态字符数组"字符串类型;
- FName 是对全局字符串表中不可变且不区分大小写的字符串的引用;相较于FString,它的大小更小,更能高效的传递,但更难以操控;
- FText 是指定用于处理本地化的更可靠的字符串表示;
//大多数情况下,使用TCHAR类型来表示字符,TEXT()宏可用于表示TCHAR文字;
MyDogPtr->DogName = FName(TEXT("Samson Aloysius"));
三,Property Specifiers
声明属性时,可添加属性说明符以控制属性行为;
AdvancedDisplay | 属性将被放置在高级选项下; |
AssetRegistrySearchable | 此属性及其值都将自动添加到资产注册表中; |
BlueprintAssignable | 仅适用于多播代理,公开要在蓝图中分配的属性; |
BlueprintAuthorityOnly | 必须是多播代理,在蓝图中,只接受标记为BlueprintAuthorityOnly的事件; |
BlueprintCallable | 仅限多播代理,应公开属性以在Blueprint代码中调用; |
BlueprintGetter=GetterFunctionName | 指定自定义访问器函数,如也没有标记BlueprintSetter或BlueprintReadWrite,则隐式地为BlueprintReadOnly; |
BlueprintSetter=SetterFunctionName | 具有自定义赋值函数,并隐式标记为BlueprintReadWrite;注意,mutator函数必须命名并属于同一类; |
BlueprintReadOnly | 蓝图只读此属性,与BlueprintReadWrite规范不兼容; |
BlueprintReadWrite | 蓝图可读写此属性,与BlueprintReadOnly规范不兼容; |
Category="TopCategory\|SubCategory\|..." | 指定在蓝图中显示属性类别,使用|运算符定义嵌套类别; |
DuplicateTransient | 在任何类型的复制(复制/粘贴、二进制复制等)过程中,属性的值都应重置为类默认值; |
EditAnywhere | 可通过原型和实例上的属性窗口进行编辑,与"Visible"说明符不兼容; |
VisibleAnywhere | 在所有属性窗口中可见,但无法编辑;与“Edit”规范不兼容; |
EditDefaultsOnly | 只可通过原型的属性窗口进行编辑,与"Visible"说明符不兼容; |
EditInstanceOnly | 只可通过实例上的属性窗口进行编辑,与"Visible"说明符不兼容; |
EditFixedSize | 仅适用于动态数组,将防止用户通过虚幻编辑器属性窗口更改数组的长度; |
EditInline | 允许在属性检查器中编辑此属性引用的对象的属性(仅适用于对象引用,包括对象引用数组); |
Export | 仅适用于对象属性(或对象数组)。指示在复制对象时(例如用于复制/粘贴操作),分配给此属性的对象应作为子对象块整体导出,而不是仅输出对象引用本身; |
Config | 属性将可配置;当前值可以保存到与类关联的.ini文件中,并在创建时加载;在默认属性中不能给值;隐式BlueprintReadOnly; |
GlobalConfig | 与Config相似,只是不能在子类中重写它;在默认属性中不能给值;隐式BlueprintReadOnly; |
Instanced | 仅限于对象(UCLASS)属性;当创建此类的实例时,将获得默认情况下分配给此属性的Object的唯一副本;用于实例化类默认属性中定义的子对象;隐式EditInline 、Export ; |
Interp | 该值可由序列器中的轨迹随时间驱动; |
Localized | 定义一个本地化值,主要用于字符串,隐式ReadOnly; |
Native | C++代码负责对其进行序列化并暴露给垃圾回收; |
NoClear | 防止编辑器将此对象引用设置为无,隐藏编辑器中的清除(和浏览)按钮; |
NoExport | 仅对native类有用,不应包含在自动生成的类声明中; |
NonPIEDuplicateTransient | 在复制过程中,将重置为默认值,除非是PIE; |
NonTransactional | 对此属性值的更改不会包含在编辑器的撤消/重做历史记录中; |
NotReplicated | 跳过复制,仅适用于服务请求函数中的结构体成员和参数; |
Replicated | 该属性应通过网络进行复制; |
ReplicatedUsing=FunctionName | 指定了一个回调函数,当属性通过网络更新时执行该函数; |
RepRetry | 仅对结构体属性有用;如此属性未能完全发送(如,对象引用尚无法通过网络序列化),请重试复制;对于简单的引用,这是默认值,但对于结构体,由于带宽成本,这通常是不可取的,因此除非指定此标志,否则它将被禁用; |
SaveGame | 一种在属性级别显式包含检查点/保存系统字段的简单方法;该标志应设置在所有旨在成为已保存游戏一部分的字段上,然后可以使用代理存档器对其进行读/写; |
SerializeText | native属性应序列化为文本(ImportText、ExportText); |
SkipSerialization | 此属性不会被序列化,但仍然可以导出为文本格式(如用于复制/粘贴操作); |
SimpleDisplay | 可见或可编辑的属性显示在“Details”面板中,无需打开“Advanced”部分即可查看; |
TextExportTransient | 此属性不会导出为文本格式(因此不能用于复制/粘贴操作); |
Transient | 属性是瞬态的,意味着不会被保存或加载;以这种方式标记的属性将在加载时填充为零; |
VisibleDefaultsOnly | 此属性仅在原型的属性窗口中可见,不能编辑;与任何“Edit”都不兼容; |
VisibleInstanceOnly | 此属性仅在实例的属性窗口中可见,对原型不可见,且不可编辑;与任何“Edit”都不兼容; |
四,Metadata Specifiers
声明类、接口、结构体、枚举、枚举值、函数,或属性时,可添加 元数据说明符 来控制其与引擎和编辑器各方面的相处方式;每一种类型的数据结构或成员都有自己的元数据说明符列表;
注,Metadata只存在于编辑器中,不要编写能够访问到Metadata的游戏逻辑;
AllowAbstract="true/false" | 用于Subclass 和SoftClass 属性,说明抽象类属性是否应显示在类选取器中; |
AllowedClasses="Class1, Class2, .." | 用于FSoftObjectPath 属性,逗号分隔的列表,表明要显示在资源选取器中的资源类类型; |
AllowPreserveRatio | 用于Fvector 属性;在细节面板中显示此属性时将添加一个比率锁; |
ArrayClamp="ArrayProperty" | 用于整数属性,将可在UI中输入的有效值锁定在0和命名数组属性的长度之间; |
AssetBundles | 用于SoftObjectPtr 或SoftObjectPath 属性,主数据资源中使用的束列表命名,指定此引用属于哪个束的一部分; |
BlueprintBaseOnly | 用于Subclass 和SoftClass 属性,说明蓝图类是否应显示在类选取器中; |
BlueprintCompilerGeneratedDefaults | 属性默认项由蓝图编译器生成,CopyPropertiesForUnrelatedObjects 在编译后调用时将不会被复制; |
ClampMin="N" | 用于浮点和整数属性,指定可在属性中输入的最小值N ; |
ClampMax="N" | 用于浮点和整数属性。指定可在属性中输入的最大值N ; |
ConfigHierarchyEditable | 此属性被序列化为一个配置(.ini )文件,可在配置层级中的任意处进行设置; |
ContentDir | 由FDirectoryPath 属性使用,说明将使用Content 文件夹中的Slate风格目录选取器来选取路径; |
DisplayAfter="PropertyName" | 在蓝图编辑器中,名为PropertyName 的属性后即刻显示此属性;前提是两个属性属于同一类别,则忽略其在源代码中的顺序进行显示;如多个属性有相同的DisplayAfter 值和相同的DisplayPriority 值,将在指定属性之后,按照自身在标头文件中声明的顺序显示; |
DisplayName="Property Name" | 此属性显示的命名,不显示代码生成的命名; |
DisplayPriority="N" | 如两个属性有相同的DisplayAfter 值,或属于同一类别且无DisplayAfter 元标签,则此属性将决定其顺序;最高优先级值为1,表示DisplayPriority 值为1的属性将在DisplayProirity 值为2的属性之上显示;如多个属性有相同的DisplayAfter 值,其将按照在标头文件中声明的顺序显示; |
DisplayThumbnail="true" | 说明属性是一个资源类型,其应显示选中资源的缩略图; |
EditCondition="BooleanPropertyName" | 对一个布尔属性进行命名,此属性用于说明此属性的编辑是否被禁用;将"!"放置在属性命名前可颠倒测试; |
EditFixedOrder | 使排列的元素无法通过拖拽来重新排序; |
ExactClass="true" | 结合AllowedClasses 用于FSoftObjectPath 属性;说明是否只能使用AllowedClasses 中指定的准确类,或子类是否同样有效; |
ExposeFunctionCategories="Category1, Category2, .." | 在蓝图编辑器中编译一个函数列表时,指定其函数应被公开的类目的列表; |
ExposeOnSpawn="true" | 指定此属性是否应在此类类型的一个Spawn Actor节点上公开; |
FilePathFilter="FileType" | 由FFilePath 属性使用;说明在文件选取器中显示的路径过滤器;常规值包括"uasset"和"umap",但这些并非唯一可能的值; |
GetByRef | 使该属性的"Get"蓝图节点返回对属性的常量引用,而不是其值的副本;只对稀疏类数据生效,只能在不存在NoGetter 时使用; |
HideAlphaChannel | 用于Fcolor 和FLinearColor 属性;说明详细显示属性控件时Alpha 属性应为隐藏状态; |
HideViewOptions | 用于Subclass 和SoftClass 属性;隐藏在类选取器中修改显示选项的功能; |
InlineEditConditionToggle | 表示出布尔属性只内联显示为其他属性中的一个编辑条件切换,不应显示在其自身的行上; |
LongPackageName | 由FDirectoryPath 属性使用;将路径转换为一个长的包命名; |
MakeEditWidget | 用于变换或旋转体属性,或变换/旋转体的排列;说明属性应在视口中公开为一个可移动控件; |
NoGetter | 防止蓝图为该属性生成一个"get"节点,只对稀疏类数据生效; |
ScriptName="DisplayName" | 在将此类、属性或函数导出到脚本语言时使用的名称;可以包含以启用的名称作为以分号分隔的额外条目; |