UEC 利用代理/委托写一个生命组件( 二 )

最后再到拥有者类中添加一个用于回调的操作函数,其中形参对应在生命组件中定义的那样(注意命名是否重复)
头文件
【UEC 利用代理/委托写一个生命组件】// 代理事件UFUNCTION()void OnHealthChanged(UHealthComponent* OnwerHealthComp, float Health, float HealthDelta,const class UDamageType* DamageType, class AController* InstigatedBy, AActor* DamageCauser);cpp文件
void APCharacter::OnHealthChanged(UHealthComponent* OnwerHealthComp, float Health, float HealthDelta, const class UDamageType* DamageType, class AController* InstigatedBy, AActor* DamageCauser){if (IsDeath) return;UE_LOG(LogTemp, Warning, TEXT("I know I was hurt! "));if (Health <= 0 && !IsDeath){UE_LOG(LogTemp, Warning, TEXT("I am Death! "));IsDeath = true;Death();GetMovementComponent()->StopMovementImmediately();GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision);// 分离控制器DetachFromControllerPendingDestroy();// 3秒后执行SetLifeSpan(3.0f);}}void APCharacter::BeginPlay(){Super::BeginPlay();HealthComp->OnHealthChanged.AddDynamic(this, &APCharacter::OnHealthChanged);}最后测试,结果无误

UEC 利用代理/委托写一个生命组件

文章插图

经验总结扩展阅读