(1)先在头文件上面声明一个代理,名字要以F开头
//声明一个事件委托
//第一个参数事件的名称(自己定义)
//后面的参数是事件所需要的参数
//因为有6个参数 所以添加_SixParams
DECLARE_DYNAMIC_MULTICAST_DELEGATE_SixParams(FOnHealthChangeSignature, USHeathComponent*, HealthComponent, float, Health, float, HealthDelta, const class UDamageType*, DamageType, class AController*, InstigatedBy, AActor*, DamageCauser);
(2)声明一个代理变量
public:
//创建事件实例
//属性暴露给蓝图
UPROPERTY(BlueprintAssignable, Category = "Events")
FOnHealthChangeSignature OnHealthChange;
(3)
在要调用的地方写
//事件广播
OnHealthChange.Broadcast(this,CurrentHealth,Damage,DamageType,InstigatedBy, DamageCauser);
(4)最后要在蓝图类中,选中声明的委托C++类组件,找到委托事件进行绑定
或者在c++进行绑定
//.h文件
UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category="Health")
USHeathComponent* HealthComponent;
//要绑定的函数参数要和声明委托的参数一致
UFUNCTION()
void OnHealthChange(USHeathComponent* HealthComponent, float Health, float HealthDelta, const class UDamageType* DamageType, class AController* InstigatedBy, AActor* DamageCauser);
//.cpp
HealthComponent->OnHealthChange.AddDynamic(this, &ASCharacter::OnHealthChange);