C++通过事件调度器调用蓝图的函数

前言

蓝图调用C++的函数比较简单,只需要在C++函数上添加BlueprintCallable标记即可。

UFUNCTION(BlueprintCallable, Category = "Socket")

而C++调用蓝图就麻烦了,这里提供的一种方法是事件调度器。事件调度器(Delegate)也被称为委托,其实就是函数指针。

示例

假如有一个C++类ACPPTest,它要调用蓝图类BP_Actor中的一个函数ShowNumber(int32),此函数具有一个int32类型的参数。

ACPPTest中创建事件调度器FShowNumber。注意UE4规定事件调度器必须以F字母开头。

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FShowNumber, int32, number);

ACPPTest中定义一个事件调度器变量ShowNumber,通过BlueprintAssignable标记其可以在蓝图中赋值。

UPROPERTY(BlueprintAssignable, Category = "Delegate")
FShowNumber ShowNumber;

在需要的地方调用即可。

ShowNumber.Broadcast(number);

在蓝图类BP_Actor中,我们将ShowNumber与自定义事件绑定即可。

注意

事件调度器本身可支持绑定带返回值的函数,又分单播模式和多播模式。但为了在蓝图中绑定,则只能使用不包含返回值的多播模式。

参数最大支持9个,如DECLARE_DYNAMIC_MULTICAST_DELEGATE_NineParams

留下评论