跳至主要內容

F5.UPROPERTY

Mr.Si大约 3 分钟u++Specifiers

头像
UPROPERTY是啥啊?

UPROPERTY定义

头像

UPROPERTY 是一个宏(macro),用于声明类的属性。这个宏允许你定义在UE编辑器中可以编辑和序列化的属性。UPROPERTY 主要用于声明类的成员变量,并指定它们的元数据以及在UE编辑器中的显示行为。

头像
还是不理解!
头像
你知道C++的变量声明和定义语法吗?
头像
这个倒是知道
//声明一个变量
int32 MyInt;
//定义一个变量
int32 MyInt = 0;
头像
Good!那么现在这个变量你知道怎么暴露给UE编辑器的蓝图使用吗?
头像

搜得寺内!这个UPROPERTY莫非就是一个暴露变量给蓝图反射的一个宏!

头像

没错,当然UPROPERTY 不仅仅是用于声明类的属性,还用于将这些属性暴露给反射系统,以便在蓝图中访问和编辑。这种方式称为"Reflection"(反射)。

头像
具体怎么用呢?
头像

在变量前加上UPROPERTY 并在()内填入对应的参数(元数据标记)

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyTest.generated.h"

UCLASS()
class EXORCIST_API AMyTest : public AActor
{
	GENERATED_BODY()
	
public:
	
	UPROPERTY(VisibleAnywhere,BlueprintReadOnly)
	int32 VisibleAnywhereNumber;

	UPROPERTY(VisibleDefaultsOnly,BlueprintReadOnly)
	int32 VisibleDefaultsOnly;
    
	UPROPERTY(VisibleInstanceOnly,BlueprintReadOnly)
	int32 VisibleInstanceOnly;
    
	UPROPERTY(EditAnywhere,BlueprintReadWrite)
	int32 EditAnywhereNumber;

	UPROPERTY(EditDefaultsOnly)
	int32 EditDefaultsOnlyNumber;
};
头像
我不明白,这些有什么区别吗?
头像
别急,听老夫慢慢道来!

属性说明符

默认可见和实例化可见
默认可见和实例化可见

VisibleAnywhere&BlueprintReadOnly

该属性在所有属性窗口中可见,但不可编辑,需配合BlueprintReadOnly。

    UPROPERTY(VisibleAnywhere,BlueprintReadOnly)
	int32 VisibleAnywhereNumber;

VisibleDefaultsOnly & BlueprintReadOnly

该属性在所有属性窗口中可见,但只能在类的默认属性面板中编辑。在蓝图中是只读的。

    UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly)
    int32 VisibleDefaultsOnlyNumber;

VisibleInstanceOnly & BlueprintReadOnly

该属性在所有属性窗口中可见,但只能在每个实例的属性面板中编辑。在蓝图中是只读的。

    UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly)
    int32 VisibleInstanceOnlyNumber;

EditAnywhere&BlueprintReadWrite

该属性在所有属性窗口中可见且可编辑。在蓝图中可以读写。

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 EditAnywhereNumber;

EditDefaultsOnly

该属性在所有属性窗口中可见,但只能在类的默认属性面板中编辑。在蓝图中可以读写。

    UPROPERTY(EditDefaultsOnly)
    int32 EditDefaultsOnlyNumber;

Category

Category|分组

	UPROPERTY(EditAnywhere, Category="分组")
	int32 Category;
	
	UPROPERTY(EditAnywhere, Category="分组|子标签")
	int32 Child;

ShowOnlyInnerProperties

内联显示属性

USTRUCT()
struct FCat
{
	GENERATED_BODY()
	UPROPERTY(EditDefaultsOnly)
	FString Name;
	UPROPERTY(EditDefaultsOnly)
	int32 Age;
	UPROPERTY(EditDefaultsOnly)
	FLinearColor Color;
};
	//ShowOnlyInnerProperties
	UPROPERTY(EditAnywhere, Category="ShowOnlyInnerProperties")
	FCat NormalProperties;//正常显示
	
	UPROPERTY(EditAnywhere, Category="ShowOnlyInnerProperties", meta=(ShowOnlyInnerProperties))
	FCat ShowOnlyInnerProperties;//内联显示

Tooltip

提示文本

UPROPERTY(EditAnywhere, meta=(ToolTip="提示文本"))
	int32 Tooltip;

DisplayName

显示名称

UPROPERTY(EditAnywhere, meta=(DisplayName="Display Font"))
	FSoftObjectPath DisplayName;

AdvancedDisplay

高级显示,属性隐藏在下拉菜单中

UPROPERTY(EditAnywhere, Category="AdvancedDisplay")
    bool NormalDisplay1;
	
UPROPERTY(EditAnywhere, Category="AdvancedDisplay")
	bool NormalDisplay2;
	
UPROPERTY(EditAnywhere, Category="AdvancedDisplay", AdvancedDisplay)
	bool AdvancedDisplay;
GIF

InlineEditConditionToggle

内联联动

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

UPROPERTY(EditAnywhere, meta=(EditCondition="bCanFly", Units="s"))
	float InlineEditConditionToggle;

更多参考