UPROPERTY宏

479 阅读3分钟

UPROPERTY宏

UPROPERTY(BlueprintReadOnly)蓝图只读属性 image.png

public:

//BlueprintReadOnly标记属性,可以在蓝图中获取,但是只能读取
UPROPERTY(BlueprintReadOnly)//变量在蓝图中只读
int32 Num;

UPROPERTY(BlueprintReadWrite)蓝图可读可修 image.png

//BlueprintReadWrite标记属性,可以在蓝图中获取和修改
//Category分组 Category="UETEST|Character" UETEST下的Character
UPROPERTY(BlueprintReadWrite,Category="UETEST|Character")
int32 Name;
//BlueprintReadOnly BlueprintReadWrite
//不能放在私有域中 private

UPROPERTY(Config)

image.png

  //Config标记属性可被存储到指定的配置文件中,启动时属性内容将从配置文件中获取
UPROPERTY(Config)
int32 Age;

UPROPERTY(EditAnywhere) image.png

 //EditAnywhere标记属性,可以在编辑窗口进行编辑,也可以在场景的细节面板中编辑
UPROPERTY(EditAnywhere)
FVector Location;

UPROPERTY(EditDefaultsOnly)

image.png

//EditDefaultsOnly标记属性可以在编辑器窗口细节面板中编辑,不可以在场景细节面板中编辑
UPROPERTY(EditDefaultsOnly)
FRotator Rotation;
    UPROPERTY(EditInstanceOnly)

UPROPERTY(EditInstanceOnly)

image.png

 //EditInstanceOnly标记属性不可以在编辑窗口编辑,可以在场景细节面板中编辑
UPROPERTY(EditInstanceOnly)
FName Size;
    
    

创建网格体组件要引用头文件

image.png

UPROPERTY(VisibleAnywhere)

image.png

//VisibleAnywhere一般标记组件指针,会让组件在场景和编辑器细节面板中显示所有编辑项
//如果标记的是普通属性(指针,基本数据类型,复合数据类型),则在场景和编译器只会显示但无法编辑
UPROPERTY(VisibleAnywhere)
class UStaticMeshComponent* Mesh;

UPROPERTY(VisibleAnywhere)
int32 Num;//在细节面板中显示但不可用

UPROPERTY(VisibleAnywhere)
UStaticMesh* StaticMesh;//使用记得引用#include "Engine/StaticMesh.h" 

image.png

UPROPERTY(VisibleDefaultsOnly)

image.png

//VisibleDefaultsOnly
//一般用于标记组件指针,会让组件在细节面板中显示所有编辑项,无法编辑
//如果标记的是普通属性(指针,基本数据类型,复合数据类型),不在场景细节面板中显示
UPROPERTY(VisibleDefaultsOnly)
class UStaticMeshComponent* Mesh;

UPROPERTY(VisibleDefaultsOnly)
int32 Num;

UPROPERTY(VisibleDefaultsOnly)
UStaticMesh* StaticMesh;
    

**VisibleInstanceOnly **
image.png

//VisibleInstanceOnly
//一般用于标记组件指针,会让组件在场景和编辑器细节面板中显示所有编辑项
//如果标记的是普通属性(指针,基本数据类型,复合数据类型),则不会在编译器中显示,会在场景细节面板中显示但无法编译

UPROPERTY(VisibleInstanceOnly)
class UStaticMeshComponent* Mesh;

UPROPERTY(VisibleInstanceOnly)
int32 Num;

UPROPERTY(VisibleInstanceOnly)
UStaticMesh* StaticMesh;
    

EditFixedSize
image.png

//EditFixedSize(这个宏标记需要配合BlueprintReadWrite或EditAnyWhere来使用)
//只是用于限制数组在蓝图细节面板中修改数组的个数,不会限制普通变量编译
//运行过程中可以去添加元素
UPROPERTY(BlueprintReadWrite,EditAnyWhere,EditFixedSize)
TArray<int32> IntArray;
UPROPERTY(BlueprintReadWrite, EditAnyWhere, EditFixedSize)
int32 Num2;//可以在编译器细节面板修改Num2的值
    

AdvancedDisplay
image.png

//AdvancedDisplay(需要和显示在面板上的宏连用)
//将属性放在细节面板高级项中(场景和编译器都可)
UPROPERTY(EditAnyWhere, AdvancedDisplay)
int32 Num3;

meta = (DisplayName = "PN") image.png

// meta = (DisplayName = "PN")
//可以用在修饰属性和函数上,要暴露到蓝图中的宏连用
//给函数或属性起一个别名,用于蓝图显示和搜索
UPROPERTY(BlueprintReadWrite, EditAnyWhere, meta = (DisplayName = "PN"))//UPROPERTY修饰属性
	FString ProjectName;
UFUNCTION(BlueprintCallable,meta = (DisplayName = "55"))//UFUNCTION标记函数 编辑器中搜索55出现这个函数
   int StringFunction();

meta=(UIMin="18",UIMax="120") image.png

//meta=(UIMin="18",UIMax="120")
//只在UI上做限制,填入不做限制
UPROPERTY(EditAnyWhere,meta=(UIMin="18",UIMax="120"))
int32 Age;//编辑器细节面板滑条范围是18~120,但是可以自行填入想要的数字
    

meta = (ClampMin = "18", ClampMax = "120")

image.png

 //meta = (ClampMin = "18", ClampMax = "120")
//UI上做限制,填入也做限制
UPROPERTY(EditAnyWhere, meta = (ClampMin = "18", ClampMax = "120"))
int32 Age1;//编辑器细节面板滑条范围是18~120,不可以自行填入想要的数字
    

meta=(EditCondition = "bIsShow")

image.png

//meta=(EditCondition = "bIsShow")
//通过一个bool变量来控制,这个属性是否可以输入
UPROPERTY(EditAnyWhere)
bool bIsShow;
UPROPERTY(EditAnyWhere, meta=(EditCondition = "bIsShow"))
FString Name2;//勾选bool才可以设置Name2;

meta=(AllowPrivateAccess="true")

image.png

private:
//注:在private中UPROPERTY(BlueprintReadWrite)不可访问 Err!
//meta=(AllowPrivateAccess="true")
//它会将C++中私有的属性,继承到蓝图变成公有属性
UPROPERTY(BlueprintReadWrite,meta=(AllowPrivateAccess="true"))
int Poss;//外部可以调用,私有变为公有