在UE C++中实现自定义事件,例如图中On Health Changed,当角色受到伤害时触发该事件
全局声明:声明动态组播委托_六个参数
//OnHealthChanged event 全局
DECLARE_DYNAMIC_MULTICAST_DELEGATE_SixParams(FOnHealthChangedSignature, USHealthComponent*, HealthComp, float, Health, float, HealthDelta, const class UDamageType*, DamageType, class AController*, InstigatedBy, AActor*, DamageCauser);
//类中函数声明
public:
UPROPERTY(BlueprintAssignable, Category = "Events")
FOnHealthChangedSignature OnHealthChanged;
第一个是函数声明名,后面是六个参数,在蓝图中显示如下:
在C++中适当位置触发该事件:
void USHealthComponent::HandleTakeAnyDamage(AActor* DamagedActor, float Damage, const class UDamageType* DamageType, class AController* InstigatedBy, AActor* DamageCauser)
{
if (Damage<=0.0f)
{
return;
}
//Update health clamped
Health = FMath::Clamp(Health - Damage, 0.0f, DefaultHealth);
//使用 Broadcast 广播事件
OnHealthChanged.Broadcast(this, Health, Damage, DamageType, InstigatedBy, DamageCauser);
}
该函数也可以在其他地方,比如角色中AddDynamic使用