PlayerCharacter.h
virtual float TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) override;
헤더에 위와 같이 선언해준다.
기존에 있던 함수를 override하는 것이기에 변형하지 않고 위와 같은 형태를 맞추어 주어야 한다.
PlayerCharacter.cpp
float APlayerCharacter::TakeDamage(float Damage, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser)
{
float ActualDamage = Super::TakeDamage(Damage, DamageEvent, EventInstigator, DamageCauser);
if (ActualDamage > 0.f && !bPlayerDie) {
playerHP -= ActualDamage;
if (playerHP <= 0.f) PlayerDie();
else {
PlayerHitAnim();
GetWorldTimerManager().SetTimer(HitTimerHandle, this, &APlayerCharacter::PlayerHitAnim, 0.5f, true);
}
}
return ActualDamage;
}
cpp 파일에서 Super() 키워드를 통해 부모의 TakeDamage() 함수를 실행시켜준다.
해당 함수를 통해 ActualDamage 변수에 플레이어가 받는 데미지가 저장되고, 이를 활용하여 플레이어의 HP를 깎는 등의 코드를 수행할 수 있다.
위 코드에서는 HP가 닳은 이후, HP가 0보다 크다면 Player Hit 모션을 수행하는 PlayerHitAnim() 함수를 실행시켰고, Timer를 통해 애니메이션이 실행되는 텀을 벌어주었다.