When you look at the documentation for TakeDamage it specifies that it returns “The amount of damage actually applied.” which isn’t what you have returned when overriding TakeDamage.
Not sure it really matters here but here is what I did…
float AShooterCharacter::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser)
{
float DamageToApply = Super::TakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser);
float DamageActuallyApplied = (DamageToApply > Health) ? Health : DamageToApply;
Health -= DamageActuallyApplied;
UE_LOG(LogTemp, Warning, TEXT("%s \tHealth: %f \tDamageActuallyApplied: %f"), *(GetName()), Health, DamageActuallyApplied);
return DamageActuallyApplied;
}