[UE5] 언리얼5 C++ - TakeDamage

AnJH·2024년 5월 17일

플레이어가 데미지를 받을 때, 호출되는 함수인 TakeDamage() 이다.

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를 통해 애니메이션이 실행되는 텀을 벌어주었다.

0개의 댓글