Unreal学习开发(二)

动态多播代理

例子1

1
2
3
4
5
6
DECLARE_DYNAMIC_MULTICAST_DELEGATE_SixParams(FOnHealthChangedSignature, USHealthComponent*, OwningHealthComp,
float, Health, float, HealthDelta, const class UDamageType*, DamageType, class AController*, InstigatedBy, AActor*, DamageCauser);//1.宏声明一个自定义delegate类型
FOnHealthChangedSignature OnHealthChanged;//2.create a instance in class
HealthComp->OnHealthChanged.AddDynamic(this, &ASCharacter::OnHealthChanged);//3.增加动态代理,一旦broadcast,执行ASCharacter::OnHealthChanged中的函数。
OnHealthChanged.Broadcast(this, Health, Damage, DamageType, InstigatedBy, DamageCauser);//4.触发代理Broadcast
FOnHealthChangedSignature OnHealthChanged;

例子2

Actor自带的代理(OnTakeAnyDamage

Called when the actor is damaged in any way.

1
2
3
4
DECLARE_DYNAMIC_MULTICAST_SPARSE_DELEGATE_NineParams( FTakePointDamageSignature, AActor, OnTakePointDamage, AActor*, DamagedActor, float, Damage, class AController*, InstigatedBy, FVector, HitLocation, class UPrimitiveComponent*, FHitComponent, FName, BoneName, FVector, ShotFromDirection, const class UDamageType*, DamageType, AActor*, DamageCauser );//1.
FTakeAnyDamageSignature OnTakeAnyDamage;//2.
MyOwner->OnTakeAnyDamage.AddDynamic(this, &USHealthComponent::HandleTakeAnyDamage);//3.
OnTakePointDamage.Broadcast(this, ActualDamage, EventInstigator, PointDamageEvent->HitInfo.ImpactPoint, PointDamageEvent->HitInfo.Component.Get(), PointDamageEvent->HitInfo.BoneName, PointDamageEvent->ShotDirection, DamageTypeCDO, DamageCauser);//4.Broadcast