unreal 属性宏 UPROPERTY

2019-07-18  本文已影响0人  pawn_c

关于UPROPERTY的介绍,官方是这么说的:

UProperty变量通过标准C++语法及额外的描述符号进行声明,描述符号包括变量修饰符以及放置于声明上的元数据。(官方中文释义)

Properties are declared using standard C++ variable syntax, preceded by the UPROPERTY macro which defines property metadata and variable specifiers.

差不多就是用来修饰属性的。在声明属性时,声明上可添加修饰符以控制引擎和编辑器的不同方面的属性表现。

最常见的用法是:

UPROPERTY(EditAnywhere)
int Test;

这样就可以把Test属性显示在编辑器中了。如图:


image.png

所有属性修饰符(用EditAnywhere和Category测试了一下,是不区分大小写的,但是规范起见,还是按照官方的大小写规则来):
AdvancedDisplay
属性被显示在细节面板的高级下拉框中。

AssetRegistrySearchable
AssetRegistrySearchable关键字表明此属性及其值将会为任意将其作为成员变量而包含的资源类示例被自动添加到资源注册中。不可用于结构体属性或参数。

BlueprintAssignable
仅能用于Multicast代理。应显示该属性,以供在蓝图中分配。

BlueprintCallable
仅能用于Multicast代理。应显示该属性,以在蓝图代码中调用。

BlueprintReadOnly
在蓝图中只读。

BlueprintReadWrite
在蓝图中读写。

Category
定义属性的分类。使用方法: Category=CategoryName.
示例:

UPROPERTY(EditAnywhere,Category="myCategory")
int Test;

效果:


image.png

Config
表示该变量将会成为可配置状态。当前值可被保存到ini文件中,并且将在创建时被载入。无法在默认属性中被赋值。只读。

EditAnywhere
表示该属性可从编辑器内的属性窗口编辑。

EditDefaultsOnly
表示该属性可通过属性窗口来编辑,但仅能对原型编辑。

EditInstanceOnly
表示该属性可通过属性窗口来编辑,但仅能对实例而非原型进行编辑。

EditFixedSize
仅限于动态数组。这使得用户不能通过UnrealEd属性窗口来变更数组的长度。

EditInline
通过此修饰符使得用户可编辑UnrealEd的属性查看器中的变量所引用的对象属性。(仅对对象引用可用,包括对象引用数组)。

Export
仅对对象属性(或对象数组)有效。表示当对象被复制(复制/粘贴)或导出到T3D时,被分配给该属性的对象应完全作为子对象区块来导出,而不是仅仅输出对象引用本身。

NoExport
仅对native类有效。此变量不应被包含在自动生成的类声明中。

GlobalConfig
类似于config修饰符,区别是您不能在子类中重载它。无法在默认属性中被赋值。 只读 。

Instanced
仅能用于对象属性。当此类的实例被创建时,它会被赋予一个默认分配给此变量的对象的独特拷贝。用于对在类默认属性中定义的子对象进行实例化。类似EditInline和Export修饰符。

Interp
表示该值可由Matinee的浮点或向量属性轨迹来随时间驱动。

Localized
此变量的值将定义本地值。最常用于字符串。只读 。

Native
属性为native:C++代码负责对其序列化并显示给GC。

NoClear
防止该对象引用在编辑器中被设置为None.隐藏编辑器的清除(以及浏览)按钮。

NonTransactional
表示变更为此变量值将不会被包含在编辑器的撤消/重做历史中。

Ref
该值在函数调用后被复制出来。仅在函数参数声明中有效。

Replicated
此变量应通过节点网络进行复制。

ReplicatedUsing
此变量应通过节点网络进行复制,在其接受到 Callback 函数后执行、

使用方法: ReplicatedUsing=FunctionName(函数名称)

RepRetry
仅用于结构体属性。如无法被完全发送,请重试复制此属性(例如,对象引用尚无法通过节点网络来进行序列化)。对于简单引用来说,这是一个默认值,但对结构体来说,由于带宽消耗,很多情况下我们不需要。所以除非此标识被定义,否则其会被禁用。

SaveGame
The SaveGame specifier is a simple way to include fields explicitly for a checkpoint/save system at the property level. You set the flag on all fields you want to save and then use a proxy archiver to read/write it.

SerializeText
Native属性应以文本形式进行序列化(导入文本,导出文本)。

SimpleDisplay
使属性在细节面板中默认为可见。

Transient
该属性为临时属性。不应被保存,在载入时会被填零。

VisibleAnywhere
表示该属性在属性窗口中可见,但根本无法被编辑。
示例:

UPROPERTY(VisibleAnywhere,Category="myCategory")
int Test=6;

效果:


image.png

VisibleDefaultsOnly
表示该属性仅在原型的属性窗口中可见,但无法被编辑。

VisibleInstanceOnly
表示该属性仅在实例的属性窗口中可见,但对原型则不行,并且无法被编辑。

更多内容可以参照官方说明文档:

https://docs.unrealengine.com/latest/CHN/Programming/UnrealArchitecture/Reference/Properties/index.html


作者:HelloMingo
来源:CSDN
原文:https://blog.csdn.net/u010133610/article/details/54171590

上一篇 下一篇

猜你喜欢

热点阅读