UPROPERTY

UPROPERTY

声明属性时,属性说明符(UPROPERTY)可被添加到声明,以控制属性与引擎和编辑器诸多方面的相处方式。

AdvancedDisplay

属性将被放置在其出现的任意面板的高级(下拉)部分中。

AssetRegistrySearchable

此属性与其值将被自动添加到将此包含为成员变量的所有资源类实例的资源注册表。不可在结构体属性或参数上使用。

BlueprintAssignable

只能与组播委托(MULTICAST_DELEGATE)共用。公开属性在蓝图中指定。

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiCastDelegateOneParam,FString,Str);

UPROPERTY(BlueprintAssignable,Category="Test")
	FMultiCastDelegateOneParam BlueprintAssignable;


BlueprintAuthorityOnly

此属性必须为一个组播委托(MULTICAST_DELEGATE)。在蓝图中,其只接受带BlueprintAuthorityOnly标签的事件。

委托绑定函数需要是有权威的既调用是在服务器,单机上

UPROPERTY(BlueprintAssignable,BlueprintAuthorityOnly,Category="Test")
	FMultiCastDelegateOneParam BleuprintAuthorityOnly;


BlueprintCallable

仅用于组播委托(MULTICAST_DELEGATE)。应公开属性在蓝图代码中调用。

UPROPERTY(BlueprintCallable,Category="Test")
	FMultiCastDelegateOneParam BlueprintCallable;


BlueprintReadOnly

此属性可由蓝图读取,但不能被修改。此说明符与 BlueprintReadWrite 说明符不兼容。

BlueprintReadWrite

可从蓝图读取或写入此属性。此说明符与 BlueprintReadOnly 说明符不兼容。

UPROPERTY(BlueprintReadOnly,Category="Test")
	float BlueprintReadOnly;

	UPROPERTY(BlueprintReadWrite,Category="Test")
	float BlueprintReadWrite;


BlueprintGetter

此属性指定一个自定义存取器函数。如此属性不带 BlueprintSetter 或BlueprintReadWrite 标签,则其为隐式 BlueprintReadOnly。

BlueprintSetter

此属性拥有一个自定义编译函数,被隐式标记为 BlueprintReadWrite。注意:必须对变异函数进行命名,并为相同类的一部分。

需要注意的是,不能把Setter函数显式声明为 inline ,否则会报错
UPROPERTY(BlueprintGetter=GetBlueprintGetterValue)
	float BlueprintGetter;

	UPROPERTY(BlueprintSetter=SetBlueprintSetterValue)
	float BlueprintSetter;
public:
	UFUNCTION(BlueprintCallable)
	float GetBlueprintGetterValue() const
	{
		return 0.0f;
	}

	UFUNCTION(BlueprintCallable)
	void SetBlueprintSetterValue(float Value)
	{
		BlueprintSetter=Value;
	}


Category

指定在蓝图编辑工具中显示时的属性类别。使用 | 运算符定义嵌套类目。

UPROPERTY(VisibleAnywhere,Category="Test|Category")
	int Category;


EditAnywhere


说明此属性可通过属性窗口在原型和实例上进行编辑。此说明符与所有"Visible"说明符均不兼容。

EditDefaultsOnly

说明此属性可通过属性窗口进行编辑,但只能在原型(BP资产)上进行。此说明符与所有"Visible"说明符均不兼容。

EditFixedSize

只适用于动态数组。这能防止用户通过虚幻编辑器属性窗口修改数组长度

就是不让你直接修改数组的长度

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

	UPROPERTY(EditDefaultsOnly,Category="Test")
	int EditDefaultsOnly;

	UPROPERTY(EditDefaultsOnly,EditFixedSize,Category="Test")
	TArray<int> EditFixedSize;

EditInline(已弃用,使用Instanced代替)

允许用户在虚幻编辑器的属性查看器中编辑此属性所引用的Object的属性(只适用于Object引用,包括Object引用的数组)。

EditInstanceOnly

说明此属性可通过属性窗口进行编辑,但只能在实例上进行,不能在原型上进行。此说明符与所有"Visible"说明符均不兼容。

UPROPERTY(EditInstanceOnly,Category="Test")
	int EditInstanceOnly;


VisibleAnywhere

类似于EditAnywhere,说明此属性在所有属性窗口中可见,但无法被编辑。此说明符与"Edit"说明符不兼容。

VisibleDefaultsOnly


类似于EditDefaultsOnly,说明此属性只在原型的属性窗口中可见,无法被编辑。此说明符与所有"Edit"说明符均不兼容。

VisibleInstanceOnly

类似于EditInstanceOnly,说明此属性只在实例的属性窗口中可见(在原型属性窗口中不可见),无法被编辑。此说明符与所有"Edit"说明符均不兼容。

Config

此属性将被设为可配置。当前值可被存入与类相关的 .ini 文件中,创建后将被加载。无法在默认属性中给定一个值。暗示为 BlueprintReadOnly。

GlobalConfig

工作原理与 Config 相似,不同点是无法在子类中进行覆盖。无法在默认属性中对其给定一个值。暗示为 BlueprintReadOnly。

Transient

属性为临时,意味着其无法被保存或加载。以此方法标记的属性将在加载时被零填充。

实际好像没有填充0,而是以ClassDefaultObject的默认值填充


DuplicateTransient

说明在任意类型的复制中(复制/粘贴、二进制复制等),属性的值应被重设为类默认值。

在编辑器关卡下复制,其值保留初始值,PIE模式下,也会重设为默认值,Transient 临时的,意思是临时值不保存的意思?

好处就是BP或者c++修改了值之后,所有关卡的值都会跟着改

Transient有什么区别? Transient 复制时不会重置

编辑器启动前
启动后

Export


`只适用于Object属性(或Object数组)。说明Object被复制时(例如复制/粘贴操作)指定到此属性的Object应整体导出为一个子Object块,而非只是输出Object引用本身。

需配合Edit,Read/ReadWrite,或者Visible属性

干嘛用的? 没找到特别完美的答案: This is used with UExporter classes (for example, for exporting objects as text). Object properties marked as ‘export’ will be fully exported (full object definition, including its properties) with the owning object instead of being exported as just the object name and path as the property value.

Instanced

仅限Object(UCLASS)属性。此类的一个实例创建时,其将被给定一个Object的特殊副本,指定到默认项中的此属性。用于实例化类默认属性中定义的子Object。暗示为EditInlineExport

以CDO作为模板创建对象时,普通方式仅使用CDO成员的Object引用,Instanced 会将成员属性创建一个新的对象.

可以直接修改Object 的属性,然后赋予了Export属性

UPROPERTY(EditAnywhere,Export,Category="Test")
	UObject* Export;

	UPROPERTY(EditAnywhere,Instanced,Category="Test")
	UObject* Instanced;


Interp


说明值可随时间由Sequencer中的一个轨道驱动。

就是可以在Sequence里直接修改其值

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


Localized(弃用)

此属性的值将拥有一个定义的本地化值。多用于字符串。暗示为 ReadOnly。

Native(已弃用)

属性为本地:C++代码负责对其进行序列化并公开到垃圾回收

NoClear

阻止从编辑器将此Object引用设为空。隐藏编辑器中的清除(和浏览)按钮。

UPROPERTY(BlueprintReadWrite,NoClear,Category="Test")
	UObject* NoClear;

NoExport(已弃用)


只适用于本地类。此属性不应包含在自动生成的类声明中。

NonPIEDuplicateTransient

属性将在复制中被重设为默认值,除非其被复制用于PIE会话。

编辑器下复制粘贴不会重置默认值

NonTransactional

说明对此属性值的修改不会包含在编辑器的撤销/重新执行历史中。

就是改了无法回退

NotReplicated

跳过复制。这只会应用到服务请求函数中的结构体成员和参数。

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

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


Replicated

属性应随网络进行复制。

ReplicatedUsing=FunctionName

ReplicatedUsing说明符指定一个回调函数,其在属性通过网络更新时执行。

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

	
	UPROPERTY(EditAnywhere,ReplicatedUsing=OnRep_ReplicatedUsing,Category="Test")
	int ReplicatedUsing;

public:
	void ServerSetReplicated();
	
	UFUNCTION()
	void OnRep_ReplicatedUsing();


void AMyActor::ServerSetReplicated()
{
	if(HasAuthority())
	{
		//
		ReplicatedUsing=1;
	}
}

void AMyActor::OnRep_ReplicatedUsing()
{
	//
}


RepRetry(弃用)

只适用于结构体属性。如果此属性未能完全发送(举例而言:Object引用尚无法通过网络进行序列化),则重新尝试对其的复制。对简单引用而言,这是默认选择;但对结构体而言,这会产生带宽开销,并非优选项。因此在指定此标签之前其均为禁用状态。

SaveGame

说明符可简便地将域显式包含,用于属性关卡中的检查点/保存系统。应在作为游戏存档一部分的所有域上设置此标签,并使用代理归档器对其进行读写。


SerializeText

本地属性应被序列化为文本(ImportTextExportText)。

SkipSerialization

此属性不会被序列化,但仍能导出为一个文本格式(例如用于复制/粘贴操作)。

SimpleDisplay

出现在细节面板中的可见或可编辑属性,无需打开"高级"部分即可见。

TextExportTransient

此属性将不会导出为一个文本格式(因此其无法用于复制/粘贴操作)。

Meta

AllowAbstract="true/false"

描述SubclassSoftClass属性是否应显示在类属性用途中。

是否编辑器显示抽象类

AllowedClasses="Class1, Class2, .."

属性FSoftObjectPath。在图片的列表中,要显示资源用于中的资源类类型。

UPROPERTY(EditAnywhere,meta=(AllowedClasses="MyActor"))
	FSoftObjectPath AllowedClasses;


AllowPreserveRatio


able data-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">

就是加了个锁,同时控制FVector XYZ值

UPROPERTY(EditAnywhere,meta=(AllowPreserveRatio))
	FVector AllowPReserveRatio;


ArrayClamp="ArrayProperty"

将可在UI中输入属性的有效值锁定在0和列表属性的长度之间。

用在int类型,限制范围在0到数组大小之间,实际好像没效果

UPROPERTY(EditAnywhere,meta=(ArrayClamp="ArrayClamp"))
	int32 ClapArrayIndex;

	UPROPERTY(EditAnywhere);
	TArray<int32> ClampArray;

AssetBundles

主数据资源中使用的列表束SoftObjectPtr修饰SoftObjectPath,用于指定此引用属于哪个部分。

暂时不知道干嘛用的

BlueprintBaseOnly

Subclass和类SoftClass是否应显示为类的属性说明图中。

和不指定BlueprintBaseOnly有啥区别么?

UPROPERTY(EditAnywhere,meta=(BlueprintBaseOnly))
	TSoftClassPtr<AMyActor> BlueprintBaseOnly;

BlueprintCompilerGeneratedDefaults

属性默认项由蓝图编译器生成,CopyPropertiesForUnrelatedObjects在编译后调用时将不会被复制。

默认值由C++构造函数生成,蓝图修改值后编译不会生效,自动变成默认值

UPROPERTY(EditAnywhere,meta=(BlueprintCompilerGeneratedDefaults))
	int32 BlueprintCompilerGeneratedDefaults;
BlueprintCompilerGeneratedDefaults=10;
编译前
编译后

ClampMin="N"

属性和属性。可在属性中指定的属性N

ClampMax="N"


e="block" data-draft-type="table" data-size="normal" data-row-style="normal">

属性和属性中的属性。可以在属性中输入的属性N。
UPROPERTY(EditAnywhere,meta=(ClampMin="1"))
	int32 ClampMin;

	UPROPERTY(EditAnywhere,meta=(ClampMax="10"))
	int32 ClampMax;


ConfigHierarchyEditable

此属性被顺序化为一个配置(.ini)文件,可在配置层级中的任意处进行设置。

在配置界面配置属性

ContentDir

FDirectoryPath将使用文件夹中的 Slate 说明样式Content目录来指定路径。

添加目录扩展,容易找到目录

UPROPERTY(EditAnywhere,meta=(ContentDir))
	FDirectoryPath ContentDir;


RelativeToGameContentDir

由 FDirectoryPath 属性使用。表示设置属性时目录对话框会输出相对于游戏内容目录的路径。

如果用户选择游戏目录之外的目录,则会显示错误Content

RelativeToGameDir

由 FFilePath 属性使用。表示 FilePicker 对话框在设置属性时会输出相对于游戏目录的路径。在游戏目录之外时将使用绝对路径。

请注意,这不适用于FDirectoryPath.


DisplayAfter="PropertyName"

DisplayName="Property Name"

显示属性的命名,不显示此代码生成的命名。

UPROPERTY(EditAnywhere,meta=(DisplayAfter="DisplayName"))
	int32 DisplayAfter;

	UPROPERTY(EditAnywhere,meta=(DisplayName="Display"))
	int32 DisplayName;


DisplayPriority="N"

最高优先级值为1,表示DisplayAfter值为1 的属性将在值为 2 的属性顺序取消显示。如多个属性有相同的声明值,其将按照标头文件中的顺序显示。


DisplayThumbnail="true"


属性是一种资源类型,应显示其资源的说明。

显示资产的缩略图

UPROPERTY(EditAnywhere,meta=(DisplayThumbnail=true))
	TSoftObjectPtr<USkeletalMesh> DisplayThumbnail;

EditCondition="BooleanPropertyName"

对一个布尔属性进行命名,该属性说明的编辑是否被禁止。将“!”声明用于属性命名前可颠倒测试。

UPROPERTY(EditAnywhere,meta=(EditCondition="EditCondition==10"))
	int32 EditConditionNum;

	UPROPERTY(EditAnywhere)
	int32 EditCondition=0;


ExactClass="true"

结合AllowedClasses属性FSoftObjectPath。说明是否只能使用AllowedClasses中指定的准确类,或子类是否同样有效。

ExposeFunctionCategories="Category1, Category2, .."

在蓝图编辑器中编译一个函数列表时,指定其函数应被公开的目标列表。

ExposeOnSpawn="true"

指定此属性是否应在此类类型的 Spawn Actor 节点上公开。

UPROPERTY(EditAnywhere,BlueprintReadWrite,meta=(ExposeOnSpawn="true"))
	int32 ExposeOnSpawn;

FilePathFilter="FileType"

FFilePath属性使用。 说明在文件指定器中显示的路径过滤器。经常值“uasset”和“umap”,但这些可能包含的值。

UPROPERTY(EditAnywhere,meta=(FilePathFilter="uasset"))
	FFilePath FilePathFilter;

	UPROPERTY(EditAnywhere,meta=(FilePathFilter="Comma-separated value files (*.csv)|*.csv",RelativeToGameDir))
	FFilePath FilePathFilterCsv;


GetByRef

该得到“蓝图节点返回使用其属性”的属性,是对属性的引用NoGetter

HideAlphaChannel

HideViewOptions

Subclass和属性。用于SoftClass在类功能中隐藏修改显示的选项。

UPROPERTY(EditAnywhere,meta=(HideViewOptions))
	TSubclassOf<AMyActor> HideViewOptions;

隐藏了ViewOptions选项栏

InlineEditConditionToggle


表示出布尔属性只在联内显示为其他的编辑条件切换,中不会显示在其自身的属性行上。

内联显示bool 类型

UPROPERTY(EditAnywhere,meta=(EditCondition="bEditCondition",Units="s"))
	int32 Seconds;

	UPROPERTY(EditAnywhere,meta=(InlineEditConditionToggle))
	bool bEditCondition;

LongPackageName

FDirectoryPath属性使用。将路径转换为一个长的包命名。

和ContentDir好像没啥区别

UPROPERTY(EditAnywhere,meta=(LongPackageName))
	FDirectoryPath LongPackageName;

MakeEditWidget

旋转体属性变换,或应变换/旋转体的排列用于在视口中公开为一个可移动或移动控件。

在编辑器界面绘制一个菱形的Widget帮你识别他

UPROPERTY(EditAnywhere,meta=(MakeEditWidget))
	FVector MakeEditWidget;


NoGetter

只对一个蓝图的获取属性进行拦截。

好像变成了NoSetter,不知道为啥

NoSetter

蓝图设置属性拦截

UPROPERTY(EditAnywhere,BlueprintReadWrite,meta=(NoGetter))
	int32 NoGetter;

	UPROPERTY(EditAnywhere,BlueprintReadWrite,meta=(NoSetter))
	int32 NoSetter;

ShowOnlyInnerProperties

由结构属性使用。表示内部属性不会显示在可扩展结构中,而是提升了一个级别。

USTRUCT()
struct FCat
{
	GENERATED_BODY()
	UPROPERTY(EditDefaultsOnly)
	FString Name;
	UPROPERTY(EditDefaultsOnly)
	int32 Age;
	UPROPERTY(EditDefaultsOnly)
	FLinearColor Color;
};
UPROPERTY(EditAnywhere, Category="Cat Without ShowOnlyInnerProperties")
	FCat Cat;
	UPROPERTY(EditAnywhere, Category="Cat With ShowOnlyInnerProperties", meta=(ShowOnlyInnerProperties))
	FCat Cat;


就是不用你点击按钮在展开结构体,而是直接显示

ToolTip

将鼠标悬停在属性上时显示带有此文本的工具提示。

UPROPERTY(EditAnywhere, meta=(ToolTip="Something that's shown when hovering."))
	int32 ToolTip;


EditConditionHides

默认情况下,EditCondition当条件评估为 false 时,将属性更改为只读。使用EditConditionHides,该属性被隐藏。我发现这对于隐藏更大的属性组很有用。

一个是隐藏,一个是只读


NoResetToDefault

这隐藏了显示的小返回箭头,用于将值重置为父蓝图或 C++ 类中定义的值。这对于大型结构或数组特别有用,您希望避免人们意外擦除整个内容。

不在显示重置的小箭头

UIMin=N

和ClampMin类似,设置UIMin会阻止用户将属性拖动到低于指定数字的位置。

但是,用户可以通过输入将数字设置为低于此值。

UIMax=N

和ClampMin类似,设置UIMin会阻止用户将属性拖动到高于指定数字的位置。

但是,用户可以通过输入将数字设置为高于此值。

UPROPERTY(EditAnywhere,meta=(UIMin=10))
	int32 UIMin;

	UPROPERTY(EditAnywhere,meta=(UIMax=100))
	int32 UIMax;

NoSpinbox=true

用于整数和浮点属性。指示不应显示数字编辑小部件的旋转框元素。

如果没有此标志,当鼠标悬停在属性输入框上时,光标将变为显示箭头,允许用户单击并拖动以更改输入框中的值。

SliderExponent=1

由数字属性使用。指示移动无界滑块时值的增长速度。

设定值为最大值, 滑动块值=Value/(Min(UIMax,SliderExponent)

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ClampMin = "0.0001", UIMin = "0.001", UIMax = "2.0", SliderExponent = 6))
	float SliderExponent;

Delta=1

更改拖动时数字更改的量。这不执行任何验证,用户仍然可以自由地手动输入一个不是该值的倍数的数字。要执行验证,请使用Multiple标签。

UPROPERTY(EditAnywhere,meta=(Delta=12))
	int32 Delta;

Multiple=1

UPROPERTY(EditAnywhere,meta=(Delta=12))
	int32 Delta;


Units=""

设置在数字后显示的单位。对于所有可能的值,请参见inside中的TEXT条目。使用未知值将导致编译错误。许多单位有多个别名,例如“Kilometers”和“km”将导致使用相同的单位。单位不区分大小写。还允许用户输入相关单位。输入结果为 的字段

就是帮你做了一层转换,辅助显示对应的类型,比如KG就是重量

附上类型列表

MicrometersMicrometersum
MillimetersMillimetersmm
CentimetersCentimeterscm
MetersMetersm
KilometersKilometerskm
InchesInchesin
FeetFeetft
YardsYardsyd
MilesMilesmi
LightyearsLightyearsly
DegreesDegreesdeg
RadiansRadiansrad
CentimetersPerSecondCentimetersPerSecondcm/s
MetersPerSecondMetersPerSecondm/s
KilometersPerHourKilometersPerHourkm/h
MilesPerHourMilesPerHourmi/h
CelsiusCelsiusC
FarenheitFarenheitF
KelvinKelvinK
MicrogramsMicrogramsug
MilligramsMilligramsmg
GramsGramsg
KilogramsKilogramskg
MetricTonsMetricTonst
OuncesOuncesoz
PoundsPoundslb
StonesStonesst
NewtonsNewtonsN
PoundsForcePoundsForcelbf
KilogramsForceKilogramsForcekgf
HertzHertzHz
KilohertzKilohertzKHz
MegahertzMegahertzMHz
GigahertzGigahertzGHz
RevolutionsPerMinuteRevolutionsPerMinuterpm
BytesBytesB
KilobytesKilobytesKB
MegabytesMegabytesMB
GigabytesGigabytesGB
TerabytesTerabytesTB
LumensLumenslm
CandelaCandelacd
LuxLuxlx
CandelaPerMeter2CandelaPerMeterSquaredcd/m2
MillisecondsMillisecondsms
SecondsSecondss
MinutesMinutesmin
HoursHourshrs
DaysDaysdy
MonthsMonthsmth
YearsYearsyr
PixelsPerInchppidpi
PercentagePercent%
Multipliertimesx
UPROPERTY(EditAnywhere, meta=(Units="Celsius"))
	float CookingTemperature;
	UPROPERTY(EditAnywhere, meta=(Units="Kilograms"))
	float TigerWeight;
	UPROPERTY(EditAnywhere, meta=(Units="GB"))
	float DiskSpace;
	UPROPERTY(EditAnywhere, meta=(Units="Percent"))
	float Happiness;
	UPROPERTY(EditAnywhere, meta=(Units="times"))
	float Deliciousness;

ForceUnits

Units似乎允许属性编辑器覆盖用于显示值的单位。相比之下ForceUnits,不允许任何类型的覆盖

就是显示的是可变的单位还是固定单位, 比如代码里是GB Units 就是可以显示为KB FOrceUnits只能显示GB

UPROPERTY(EditAnywhere, meta=(ForceUnits="GB"))
	float DiskSpace;


GetOptions

FName为orFString属性生成下拉列表而不是文本框。下拉列表的内容由函数的结果填充。

该函数在编辑器中打开蓝图时调用一次,然后每次用户单击下拉菜单时调用。

请注意文档中提到始终返回TArray<FString>,即使属性是FName.

既适用于FName/FString也适用于TArray<FName>/TArray<FString>

Module.Class.Function通过语法支持外部静态函数引用。

UPROPERTY(meta=(GetOptions="GetAnimalOptions"))
FString Animal;

UFUNCTION()
TArray<FString> GetAnimalOptions() const
{
    return { "Cat", "Dog", "Elephant" };
}

UPROPERTY(meta=(GetOptions="GetSocketNames"))
TArray<FName> AttachSocketNames;

UFUNCTION()
TArray<FString> GetSocketNames() const
{
    TArray<FString> SocketNames;
    // Get skeletal mesh, populate list of socket names
    return SocketNames;
}

MultiLine=true

显示一个文本框,该文本框将随着用户添加多行而增长。用于Shift+Enter输入换行符。

请注意,这不是标志属性,而是布尔属性。meta=(MultiLine)不会做任何事情。它一定要是meta=(MultiLine=true)

用于 FString 和 FText 属性。指示编辑字段应该是多行的,允许输入换行符。

UPROPERTY(EditAnywhere, meta=(MultiLine=true))
FText SomeLongText;

PasswordField

请注意,这不是标志属性,而是布尔属性。meta=(PasswordField)不会做任何事情。它一定要是meta=(PasswordField=true)

用于 FString 和 FText 属性。表示编辑字段是机密字段(例如密码),输入的文本将替换为点。不要将此作为您唯一的安全措施。属性数据仍以纯文本形式存储。

UPROPERTY(EditAnywhere, meta=(PasswordField=true))
FString ShhSecret;

ArraySizeEnum

将静态创建的数组上的索引替换为 a 中的索引UENUM()。请注意,“添加元素”按钮是隐藏的。与UMETA(Hidden)

jiushi 把显示的Index换成ENum

UENUM()
enum class EArmorSlots
{
    Head,
    LeftArm,
    RightArm,
    Tummy UMETA(Hidden),
    LeftLeg,
    RightLeg,
    Num UMETA(Hidden)
};
UPROPERTY(EditAnywhere, meta=(ArraySizeEnum="EArmorSlots"))
FColor ColorForSlot[EArmorSlots::Num];

TitleProperty=""

显示结构数组时,TitleProperty允许您在结构中设置一个FStringFName属性以用作数组元素的标题。

从 Unreal 5.0 开始,您可以使用FText::Format-like 格式输出更复杂的内容。请参见FDogMapping下面的示例。

USTRUCT()
struct FCat
{
    GENERATED_BODY()
    UPROPERTY(EditDefaultsOnly)
    FString Name;
    UPROPERTY(EditDefaultsOnly)
    int32 Age;
    UPROPERTY(EditDefaultsOnly)
    FLinearColor Color;
};
// ...
UPROPERTY(EditAnywhere, meta=(TitleProperty="Name"))
TArray<FCat> Cats;

USTRUCT()
struct FDogMapping
{
    GENERATED_BODY()
    UPROPERTY(EditDefaultsOnly)
    FString Name;
    UPROPERTY(EditDefaultsOnly)
    TSoftClassPtr<AActor> ActorClass;
};
// Unreal 5.0 onwards supports FText-like formatting
UPROPERTY(EditAnywhere, meta=(TitleProperty="{Name} spawns {ActorClass}"))
TArray<FDogMapping> DogMappings;
对比
UE5.0效果

NoElementDuplicate

用于数组属性。指示不应在属性面板中为此数组的条目显示复制图标。

UPROPERTY(EditAnywhere, meta=(NoElementDuplicate))
TArray<TSoftObjectPtr<class AActor>> NoDuplicatedActors;

绝对不适用于整数和字符串等简单数据类型。

Bitmask /BitmaskEnum

显示一个包含所有位掩码选项的下拉框。单击它们启用或禁用该标志。

UENUM(meta = (Bitflags, UseEnumValuesAsMaskValuesInEditor = "true"))
enum class EAnimalFlags : uint8
{
    CanFly     = 1 << 0,
    CanSwim    = 1 << 1,
    CanLayEggs = 1 << 2,
};
ENUM_CLASS_FLAGS(EAnimalFlags)

// Data type can be flag or int32
UPROPERTY(EditDefaultsOnly, meta = (Bitmask, BitmaskEnum = EAnimalFlags))
int32 AnimalFlags;

ReadOnlyKeys

使TMap键在编辑器中为只读(如果您在 CDO 中填写它们)。

ForceInlineRow

UPROPERTY(EditAnywhere, meta=(ForceInlineRow))
TMap<FGameplayTag, FMyStruct> Prop;


AllowPrivateAccess=true

指示标记为 BluperintReadOnly 或 BlueprintReadWrite 的私有成员应该可以从蓝图中访问


MakeStructureDefaultValue

对于结构中的属性,指示蓝图制作结构节点中属性的默认值。

UPROPERTY(EditAnywhere, meta=(MakeStructureDefaultValue = "1,1,1"))
FVector Scale3D;

DeprecatedProperty /DeprecationMessage

DeprecatedProperty使用和标记属性DeprecationMessage会导致在编译使用该变量的蓝图时显示警告。

似乎没有DeprecationMessage,没有显示警告。所以一定要加一个。

在 Unreal 代码库中,很多使用前缀重命名变量DEPRECATED_并使用DisplayName它使其在蓝图中看起来相同的实例。

// Simple
UPROPERTY(BlueprintReadWrite, meta=(DeprecatedProperty, DeprecationMessage="This is deprecated"))
FString PlantName;

// Better
UPROPERTY(BlueprintReadWrite, meta=(DisplayName="PlantName", DeprecatedProperty, DeprecationMessage="PlantName is deprecated, instead use PlantDisplayName."))
FString DEPRECATED_PlantName;

DisallowedClasses

与 DeprecatedNode、DeprecatedProperty 或 DeprecatedFunction 结合使用以自定义向用户显示的警告消息。


BindWidget

允许 C++ 代码访问蓝图中UWidget定义的变量。UUserWidget如果这没有意义,请查看本教程

UPROPERTY(meta=(BindWidget))
UImage* CharacterPortrait;

BindWidgetOptional

BindWidget未找到 -specified 小部件时,编译时会引发错误。当BindWidgetOptional未找到 -specified 小部件时,仅显示信息级日志条目。将它用于您的用户小部件不需要工作的小部件。请注意,您将需要使用nullptr检查来查看小部件是否存在于蓝图中。

UPROPERTY(meta=(BindWidgetOptional))
UImage* CharacterPortrait;

BindWidgetAnim

允许 C++ 代码调用在子用户控件蓝图中定义的控件动画。动画的名称必须与变量匹配。查看UWidgetBlueprintGeneratedClass::BindAnimations更多精彩细节。

UPROPERTY(meta=(BindWidgetAnim))
UWidgetAnimation* RevealWindow;

BindWidgetAnimOptional

BindWidgetAnim与 User Widget 蓝图中不存在动画时相同但不报错

UPROPERTY(meta=(BindWidgetAnimOptional))
UWidgetAnimation* RevealWindow;


DataTableImportOptional=true

RequiredAssetDataTags=""

仅显示具有指定行结构类的数据表资产。

UPROPERTY(EditDefaultsOnly, meta=(RequiredAssetDataTags="RowStructure=ImageRow"))
class UDataTable* ImageSetTable;

RowType=""

UPROPERTY(EditDefaultsOnly, meta=(RowType="ImageRow"))
class UDataTable* ImageSetTable;

ConsoleVariable

向开发者控制台公开一个变量(可通过波浪号键访问~)。

在开发人员设置中大量使用。

UPROPERTY(config, EditAnywhere, meta=(ConsoleVariable="r.Shadow.Funky"))
bool bEnableFunkyShadows = true;


MetaClass=""

使用 FSoftClassPath 属性。指示类选择器在筛选要显示的类时将使用的父类。

UPROPERTY(EditAnywhere, meta=(MetaClass="UserWidget"))
FSoftClassPath WidgetToCreate;

UPROPERTY(config, EditAnywhere, meta=( MetaClass="DPICustomScalingRule" ))
FSoftClassPath CustomScalingRuleClass;

MustImplement=""

用于 Subclass 和 SoftClass 属性。指示所选类必须实现特定接口

UPROPERTY(EditAnywhere, meta=(MustImplement="InteractibleInterface"))
TSubclassOf<AActor> InteractibleActor;

ShowTreeView

用于 Subclass 和 SoftClass 属性。将选取器显示为树视图而不是列表


AllowAnyActor

用于 ComponentReference 属性。指示不在属性外部层次结构中的其他参与者是否应显示在组件选择器中。

UPROPERTY(EditAnywhere, meta = (UseComponentPicker, AllowAnyActor))
FComponentReference ComponentRef;

UseComponentPicker

您可以使用FComponentReference?似乎只在代码库中使用过一次或两次。

UPROPERTY(EditAnywhere, meta = (UseComponentPicker, AllowAnyActor))
FComponentReference ComponentRef;

Categories

这允许您限制允许为FGameplayTag属性选择哪些游戏标签。可以用逗号分隔多个标签。

也可以用于UPARAM限制允许的游戏标签UFUNCTION()

引擎中有与FGameplayTag, FGameplayTagQuery, FGameplayTagContainer,一起使用的示例TArray<FGameplayTag>

UPROPERTY(EditAnywhere, meta=(Categories="Farm.Tools"))
FGameplayTag DefaultEquippedTool;

UPROPERTY(EditAnywhere, meta=(Categories="Dungeon.Item,Palace.Weapon"))
TArray<FGameplayTag> ShopInventory;

ForceShowEngineContent

由资产属性使用。指示资产选择器应始终显示引擎内容

ForceShowPluginContent

由资产属性使用。指示资产选择器应始终显示插件内容


ScriptNoExport

在属性或函数上设置标志以防止将其导出为脚本语言。

也用于UFUNCTION()

ScriptName=""

将此类、属性或函数导出到脚本语言时使用的名称。可能包含不推荐使用的名称作为附加的分号分隔条目。


ConfigRestartRequired

在 -config标记的项目设置和编辑器首选项变量中使用。当标有此标记的变量发生更改时,Unreal 会提示用户重新启动其编辑器以使更改生效。


Untracked

用于 SoftObjectPtr/SoftObjectPath 属性以指定不应跟踪的引用。此引用不会自动烹制或保存到资产注册表中以进行重定向器/删除修复。

AlwaysAsPin

该属性始终作为数据引脚公开。仅适用于将在 Persona 和 UMG 中显示的属性。

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Settings, meta=(AlwaysAsPin))
EHand Hand = EHand::VR_LeftHand;

NeverAsPin

该属性可以作为数据引脚公开,默认情况下可见。仅适用于将在 Persona 和 UMG 中显示的属性。

PinShownByDefault

该属性可以作为数据引脚公开,默认情况下可见。仅适用于将在 Persona 和 UMG 中显示的属性。

PinHiddenByDefault

该属性可以作为数据引脚公开,但默认情况下是隐藏的。仅适用于将在 Persona 和 UMG 中显示的属性。

CustomizeProperty

指示该属性具有要显示的自定义代码,并且不应在详细信息面板中生成标准属性小部件。仅适用于将在 Persona 中显示的属性。

OverridingInputProperty=""

用于 MaterialExpression 类中的浮点属性。如果未连接指定的 FMaterialExpression 引脚,则使用此值。

UCLASS(MinimalAPI)
class UMaterialExpressionAdd : public UMaterialExpression
{
  GENERATED_BODY()

  UPROPERTY(meta = (RequiredInput = "false", ToolTip = "Defaults to 'ConstA' if not specified"))
  FExpressionInput A;

  // Only used if A is not hooked up
  UPROPERTY(EditAnywhere, meta=(OverridingInputProperty="A"))
  float ConstA;
};

RequiredInput=true

用于 MaterialExpression 类中的 FMaterialExpression 属性。如果指定,则无需连接引脚,而是使用标记为 OverridingInputProperty 的属性值。

UCLASS(MinimalAPI, collapsecategories, hidecategories=Object)
class UMaterialExpressionFresnel : public UMaterialExpression
{
  GENERATED_BODY()

  UPROPERTY(meta = (RequiredInput = "false", ToolTip = "Defaults to 'BaseReflectFraction' if not specified"))
  FExpressionInput BaseReflectFractionIn;
};

IgnoreForMemberInitializationTest

当无法以确定性方式安全地测试属性时,用于绕过属性初始化测试。示例:随机数、向导等。


XAxisName

在曲线的 X 轴上设置标签。

YAxisName

在曲线的 Y 轴上设置标签。

UPROPERTY(EditAnywhere, Config, meta=(XAxisName="Distance", YAxisName="Value"))
FRuntimeFloatCurve DistanceCurve;
UPROPERTY(EditAnywhere, Config, meta=(XAxisName="Distance", YAxisName="Value"))
FRuntimeFloatCurve DistanceCurve;

posted @ 2023-05-26 15:20  tomato-haha  阅读(71)  评论(0编辑  收藏  举报