当前位置: 首页 > article >正文

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的唯一副本;用于实例化类默认属性中定义的子对象;隐式EditInlineExport
Interp该值可由序列器中的轨迹随时间驱动;
Localized定义一个本地化值,主要用于字符串,隐式ReadOnly;
NativeC++代码负责对其进行序列化并暴露给垃圾回收;
NoClear防止编辑器将此对象引用设置为无,隐藏编辑器中的清除(和浏览)按钮;
NoExport仅对native类有用,不应包含在自动生成的类声明中;
NonPIEDuplicateTransient在复制过程中,将重置为默认值,除非是PIE;
NonTransactional对此属性值的更改不会包含在编辑器的撤消/重做历史记录中;
NotReplicated跳过复制,仅适用于服务请求函数中的结构体成员和参数;
Replicated该属性应通过网络进行复制;
ReplicatedUsing=FunctionName指定了一个回调函数,当属性通过网络更新时执行该函数;
RepRetry仅对结构体属性有用;如此属性未能完全发送(如,对象引用尚无法通过网络序列化),请重试复制;对于简单的引用,这是默认值,但对于结构体,由于带宽成本,这通常是不可取的,因此除非指定此标志,否则它将被禁用;
SaveGame一种在属性级别显式包含检查点/保存系统字段的简单方法;该标志应设置在所有旨在成为已保存游戏一部分的字段上,然后可以使用代理存档器对其进行读/写;
SerializeTextnative属性应序列化为文本(ImportText、ExportText);
SkipSerialization此属性不会被序列化,但仍然可以导出为文本格式(如用于复制/粘贴操作);
SimpleDisplay可见或可编辑的属性显示在“Details”面板中,无需打开“Advanced”部分即可查看;
TextExportTransient此属性不会导出为文本格式(因此不能用于复制/粘贴操作);
Transient属性是瞬态的,意味着不会被保存或加载;以这种方式标记的属性将在加载时填充为零;
VisibleDefaultsOnly此属性仅在原型的属性窗口中可见,不能编辑;与任何“Edit”都不兼容;
VisibleInstanceOnly此属性仅在实例的属性窗口中可见,对原型不可见,且不可编辑;与任何“Edit”都不兼容;

四,Metadata Specifiers

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

注,Metadata只存在于编辑器中,不要编写能够访问到Metadata的游戏逻辑;

AllowAbstract="true/false"用于SubclassSoftClass属性,说明抽象类属性是否应显示在类选取器中;
AllowedClasses="Class1, Class2, .."用于FSoftObjectPath属性,逗号分隔的列表,表明要显示在资源选取器中的资源类类型;
AllowPreserveRatio用于Fvector属性;在细节面板中显示此属性时将添加一个比率锁;
ArrayClamp="ArrayProperty"用于整数属性,将可在UI中输入的有效值锁定在0和命名数组属性的长度之间;
AssetBundles用于SoftObjectPtrSoftObjectPath属性,主数据资源中使用的束列表命名,指定此引用属于哪个束的一部分;
BlueprintBaseOnly用于SubclassSoftClass属性,说明蓝图类是否应显示在类选取器中;
BlueprintCompilerGeneratedDefaults属性默认项由蓝图编译器生成,CopyPropertiesForUnrelatedObjects在编译后调用时将不会被复制;
ClampMin="N"用于浮点和整数属性,指定可在属性中输入的最小值N
ClampMax="N"用于浮点和整数属性。指定可在属性中输入的最大值N
ConfigHierarchyEditable此属性被序列化为一个配置(.ini)文件,可在配置层级中的任意处进行设置;
ContentDirFDirectoryPath属性使用,说明将使用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用于FcolorFLinearColor属性;说明详细显示属性控件时Alpha属性应为隐藏状态;
HideViewOptions用于SubclassSoftClass属性;隐藏在类选取器中修改显示选项的功能;
InlineEditConditionToggle表示出布尔属性只内联显示为其他属性中的一个编辑条件切换,不应显示在其自身的行上;
LongPackageNameFDirectoryPath属性使用;将路径转换为一个长的包命名;
MakeEditWidget用于变换或旋转体属性,或变换/旋转体的排列;说明属性应在视口中公开为一个可移动控件;
NoGetter防止蓝图为该属性生成一个"get"节点,只对稀疏类数据生效;
ScriptName="DisplayName"在将此类、属性或函数导出到脚本语言时使用的名称;可以包含以启用的名称作为以分号分隔的额外条目;


http://www.kler.cn/a/534759.html

相关文章:

  • LabVIEW与PLC交互
  • Javascript 日期计算如何实现当前日期加一天或者减去一天
  • 今日AI和商界事件(2025-02-05)
  • HTML排版标签、语义化标签、块级和行内元素详解
  • Java实习生面试题汇总
  • JPA使用@EntityGraph立即加载关联实体
  • 高手之间的较量,是“想过”和“想透”之间的较量
  • 深入理解小波变换:信号处理的强大工具
  • python代码
  • HELLOCTF反序列化靶场全解
  • langchain教程-2.prompt
  • DeepSeek写的lammps反应势断键动态显示程序
  • 使用requestAnimationFrame减少浏览器重绘
  • 事件驱动架构(EDA)
  • 电路研究9.2.10——合宙Air780EP中文件系统读写命令使用方法研究
  • 达梦利用老备份集和新归档日志进行异机恢复
  • 单硬盘槽笔记本更换硬盘
  • 2025年南软考研复试,进!
  • 【机器学习与数据挖掘实战】案例12:基于决策树算法的水色图像的水质评价
  • 如何使用Webpack构建前端应用?
  • 剑指 Offer II 014. 字符串中的变位词
  • 快速搭建GPU环境 | docker、k8s中使用gpu
  • DS本地化部署教程
  • 谈谈芯片设计企业中的产品项目管理
  • 【漫画机器学习】083.安斯库姆四重奏(Anscombe‘s quartet)
  • 链式结构二叉树(递归暴力美学)