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