单播代理
声明单播代理
DECLARE_DELEGATE(Delegateone);
DECLARE_DELEGATE_OneParam(Delegatetwo, float);
DECLARE_DELEGATE_TwoParams(Delegatethree, FString, float);
DECLARE_DELEGATE_RetVal(float, Delegatefour);
命名代理并且添加函数。
public:
Delegateone Delegateone;
Delegatetwo Delegatetwo;
Delegatethree Delegatethree;
Delegatefour Delegatefour;
void functionone();
void functiontwo(float value);
void functionthree(FString str, float value);
float functionfour();
绑定函数到代理
Delegateone.BindUObject(this, &ATestActor1::functionone);
Delegatetwo.BindUObject(this, &ATestActor1::functiontwo);
Delegatethree.BindUObject(this,&ATestActor1::functionthree);
Delegatefour.BindUObject(this, &ATestActor1::functionfour);
执行委托
Delegateone.ExecuteIfBound();
Delegatetwo.ExecuteIfBound(1.0f);
Delegatethree.ExecuteIfBound("test",1.0f);
float key = Delegatefour.Execute();
多播代理
声明代理并创建函数
DECLARE_MULTICAST_DELEGATE_OneParam(MultiDelegate, float);
MultiDelegate MultiDelegate;
UFUNCTION()
void MultiFunction1(float value);
UFUNCTION()
void MultiFunction2(float value);
绑定
MultiDelegate.AddUObject(this, &ATestActor1::MultiFunction1);
MultiDelegate.AddUObject(this, &ATestActor1::MultiFunction2);
执行
MultiDelegate.Broadcast(1.0f);
动态多播代理
动态多播代理可以暴露给蓝图,让蓝图进行事件绑定。代理名称需要以F开头。
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(Fdelegate, float, value);
//在类中声明变量
UPROPERTY(BlueprintAssignable)
Fdelegate Delegate;
执行
Delegate.Broadcast(1.0f);