【UE5 C++】C++代码调用蓝图方法或事件

此方法为:先创建C++类MyTest,再以MyTest类为父类创建蓝图;在其他类中,可以通过MyTest调用蓝图对应方法。

1.创建c++代码

通过UE创建继承自Actor的C++代码
在这里插入图片描述
在这里插入图片描述

2.添加可以在UE中重写方法的说明

需使用声明:UFUNCTION(BlueprintNativeEvent, BlueprintCallable)

BlueprintNativeEvent表示在c++中定义事件,可以在UE中实现,c++中必须实现。
如果UE中实现了,则覆盖c++中逻辑。

BlueprintCallable 表示可以在蓝图中调用。

完整代码 .h文件:

public:	
	//添加可以在UE中重写方法
	UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
	void Play(int num);
	virtual void Play_Implementation(int num);

.cpp文件增加方法:

void AMyTest::Play_Implementation(int num)
{
}

其中.h文件的 virtual void Play_Implementation();可以不写,写是为了方便实用快捷键创建.cpp中的实现。

.cpp文件中必须实现Play_Implementation。
后缀为官方定义的不可更改。不然.h中的Play()会报错。

注:可以填参数int32,但我测试FString类型无法添加 。 传递FString类型 要使用:const FString& str

注:增加了此代码后,需要重写通过编辑器编译进入UE,不然可能不会出现步骤2中的可选事件

2.创建蓝图类

以MyTest为末班,创建蓝图类。
在这里插入图片描述
打开蓝图类,鼠标移动到左侧FUNCTIONS菜单上,可以出现下拉菜单,可以发现刚才出现了刚才定义的Play。
在这里插入图片描述
点击Play,可以发现生成了一个事件。
可以对其进行连线,以便进一步在C++中调用。
![在这里插入图片描述](https://img-blog.csdnimg.cn/b6680a9313724a26893b28cfe83a8940.png

3.调用测试

到此,只要获取到该蓝图的Actor,Cast获取MyTest,即可调用声明的Play方法。

AMyTest* myTestActor = Cast<AMyTest>(Actor);
	if(myTestActor)
	{
		myTestActor->Play(99);
	}

注:Actor为创建出来的蓝图对象,自行获取

猜你喜欢

转载自blog.csdn.net/boyZhenGui/article/details/134186168
今日推荐