10- 动态代理

10. 动态代理

1. 动态单播代理

1.1 声明动态单播代理类型

​ 其它和单播代理一样,但是动态单播代理主要在蓝图中使用,参数需要对应的参数名。

DECLARE_DYNAMIC_DELEGATE(FTestDyDelegate);
DECLARE_DYNAMIC_DELEGATE_RetVal_OneParam(float, FTestDyDelegate1P, int32, a);

1.2 创建动态单播代理

FTestDyDelegate DyDelegate;
image-20231213142837715

1.3 绑定函数

DyDelegate.BindDynamic(this, &AMyActor::TestFunc);

2. 动态多播代理

2.1 声明动态多播代理类型

DECLARE_DYNAMIC_MULTICAST_DELEGATE(FTestDyMuDelegate);

2.2 创建动态多播代理

​ 使用UPROPERTY(BlueprintAssignable)创建

UPROPERTY(BlueprintAssignable)
FTestDyMuDelegate TestDyMuDelegate;

2.3 绑定函数

​ 注意:动态多播代理绑定的函数必须是UFUNCTION

TestDyMuDelegate.AddDynamic(this, &AMyActor::TestFunc); 

2.4 执行

TestDyMuDelegate.Broadcast();