一、前言
C++代码中通过关键字“UPROPERTY”来讲所需要的变量、方法或枚举反射暴露给蓝图,实现C++和蓝图之间的通信。所有实现的变量都在一个名为“MyPawn1”类中,同时提到的蓝图是根据这个类创建的。同时这个Pawn类为场景中的默认Pawa类。
文中提到的实例化面板也即根据上图1.1.1创建的蓝图”BP_MyPawn1“实例化后的面板,当运行程序后会默认创建一个实例,同时如果自动讲”BP_MyPawn1“蓝图拖动到场景中也会创建一个实例。如图1.1.2所示为运行后的两个蓝图实例。
二、实现
2.1、变量的VisibleDefaultsOnly
表示只在蓝图的类默认设置可见,比如在C++中定义一个该变量,那么这个变量只会在如图
//这个注释也会被反射到面板上,当鼠标悬浮面板该变量时会显示当前注释
//通过反射将属性暴露给蓝图的细节面板中,来实现C++和蓝图的通信
UPROPERTY(VisibleDefaultsOnly)//VisibleDefaultsOnly表示仅在类默认设置可见
int32 VisibleDefaultsOnlyInt;
2.1.1所示的蓝图类默认设置面板中出现,同时所有的注释也会被反射到蓝图的这个变量中。在其
任何面板中都不会显示。
2.2、变量的VisibleInstanceOnly
表示只在蓝图的实例化细节面板中可见,如定义C++的变量如下
UPROPERTY(VisibleInstanceOnly)//仅仅在实例化细节面板可见
FString VisibleInstanceString;
那么这边变量只会在实例化面板中显示,如图2.2.1所示,只可见不能编辑。
2.3、变量的VisibleAnywhere
顾名思义是在类默认设置和实例化细节面板都可见。
UPROPERTY(VisibleAnywhere)//类默认设置和实例化细节面板都可见
FVector VisibleAnywhereVector;
2.4、变量的EditDefaultsOnly
仅在类默认设置里可以编辑,可以编辑当然类默认设置里也可见,在实例化面板中依然不可见。
//仅在类默认设置里面可以编辑
UPROPERTY(EditDefaultsOnly)
int32 EditDefaultsOnlyInt;
2.5、变量的EditInstanceOnly
仅仅在实例化面板中可见可编辑,在类默认设置中不可见。
//仅在实例化面板中可以编辑
UPROPERTY(EditInstanceOnly)
FString EditInstanceOnlyString;
2.6、变量的EditAnywhere
在任何面板中可见可编辑。
//在类默认设置和实例化细节面板都可以编辑
UPROPERTY(EditAnywhere)
FVector EditAnywhereVec;
2.7、变量的BlueprintReadWrite
在蓝图中可读,如下定义的代码,可以在各个面板中编辑,但是蓝图调用的时候只读,如图2.7.1所示
//在各个面板上可编辑,但是在蓝图中仅可读,
UPROPERTY(EditAnywhere, BlueprintReadOnly)
int32 BlueprintReadOnlyInt;
当然,前面的”EidtAnywhere“也可以不要,这样在任何面板都没有这个变量了。
2.8、变量的Category
将变量归类到目录中,如图2.8.1所示为该变量归类到MyIntValue中后的效果。
// 在蓝图中使用变量,将变量设置成目标目录
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyIntValue")
int32 valueInt;
2.9、变量的Meta
可以将变量的一些属性进行自定义,如名字、控制和提示等。
1、DisplayName设置变量别名:如下定义的代码,如果出现乱码需要将CPP文件保存为UniCode
//DisplayName别名,可以设置成中文
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (DisplayName = "我是别名"))
int32 myValue3;
格式的文件再编译。
2、EditCondition设置变量条件控制
//条件可控制编辑,在面板上当控制变量为true时才可以对目标变量进行编辑
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (DisplayName = "条件控制编辑变量"))
bool isControl;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "isControl"))
float targetController;
如图2.9.1所示为需要先设置”条件控制编辑变量“为True时才可以编辑变量
3、ToolTip显示提示的内容
//解释说明变量,和注释类似,当有了这个后,注释部分会消失,只显示TooltTip的内容
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "当isControl=true时"))
bool isTrue;
如图2.9.2所示,显示的内容为设置的”ToolTip“内设置的内容
三、总结
3.1、在变量中的注释也会被显示到蓝图中,在鼠标悬浮在蓝图的变量或方法时会显示当前的注释,知道使用ToolTip修改了显示的内容。