前言
蓝图调用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。
