虚幻学习笔记9—C++代码变量与蓝图的通信

2023-12-13 18:14:28

一、前言

? ? ? ? C++代码中通过关键字“UPROPERTY”来讲所需要的变量、方法或枚举反射暴露给蓝图,实现C++和蓝图之间的通信。所有实现的变量都在一个名为“MyPawn1”类中,同时提到的蓝图是根据这个类创建的。同时这个Pawn类为场景中的默认Pawa类。

图1.1.1

? ? ? ? 文中提到的实例化面板也即根据上图1.1.1创建的蓝图”BP_MyPawn1“实例化后的面板,当运行程序后会默认创建一个实例,同时如果自动讲”BP_MyPawn1“蓝图拖动到场景中也会创建一个实例。如图1.1.2所示为运行后的两个蓝图实例。

图1.1.2

二、实现

2.1、变量的VisibleDefaultsOnly

????????表示只在蓝图的类默认设置可见,比如在C++中定义一个该变量,那么这个变量只会在如图

//这个注释也会被反射到面板上,当鼠标悬浮面板该变量时会显示当前注释
//通过反射将属性暴露给蓝图的细节面板中,来实现C++和蓝图的通信
UPROPERTY(VisibleDefaultsOnly)//VisibleDefaultsOnly表示仅在类默认设置可见
	int32 VisibleDefaultsOnlyInt;

2.1.1所示的蓝图类默认设置面板中出现,同时所有的注释也会被反射到蓝图的这个变量中。在其

图2.1.1

任何面板中都不会显示。

2.2、变量的VisibleInstanceOnly

? ? ? ? ? ?表示只在蓝图的实例化细节面板中可见,如定义C++的变量如下

	UPROPERTY(VisibleInstanceOnly)//仅仅在实例化细节面板可见
		FString VisibleInstanceString;

????????那么这边变量只会在实例化面板中显示,如图2.2.1所示,只可见不能编辑。

图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;
图2.7.1

当然,前面的”EidtAnywhere“也可以不要,这样在任何面板都没有这个变量了。

2.8、变量的Category

????????将变量归类到目录中,如图2.8.1所示为该变量归类到MyIntValue中后的效果。

	// 在蓝图中使用变量,将变量设置成目标目录
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyIntValue")
	int32 valueInt;
图2.8.1

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时才可以编辑变量

图2.9.1

3、ToolTip显示提示的内容

	//解释说明变量,和注释类似,当有了这个后,注释部分会消失,只显示TooltTip的内容
	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "当isControl=true时"))
	bool isTrue;

如图2.9.2所示,显示的内容为设置的”ToolTip“内设置的内容

图2.9.2

三、总结

3.1、在变量中的注释也会被显示到蓝图中,在鼠标悬浮在蓝图的变量或方法时会显示当前的注释,知道使用ToolTip修改了显示的内容。

文章来源:https://blog.csdn.net/zhangxiao13627093203/article/details/134871822
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。