TakeDamage() 함수
감지된 액터에 데미지를 전달하기 위한 데미지 프레임워크가 제공된다
그중 대표적인 것이 AActor::TakeDamage() 함수이다
TakeDamage() 함수는 총 네 개의 인자를 가진다
- DamageAmount
전달할 데미지의 양
- DamageEvent
데미지의 종류
- EventInstigator
공격 명령을 내린 컨트롤러
- DamageCauser
데미지 전달을 위해 사용한 액터
bCanBeDamaged 속성
모든 액터에는 CanBeDamaged 속성이 있다
이를 false로 설정하면 캐릭터에 전달된 데미지의 결과가 모두 0이 되는 무적 상태가 된다
TakeDamage() 함수 코드 예시
// SPlayerCharacter.h
...
class STUDYPROJECT_API ASPlayerCharacter : public ASCharacter
{
...
public:
...
virtual float TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) override;
protected:
...
};
// SPlayerCharacter.cpp
...
#include "Engine/EngineTypes.h"
#include "Engine/DamageEvents.h"
...
void ASPlayerCharacter::OnCheckHit()
{
...
if (bResult == true)
{
if (IsValid(HitResult.GetActor()) == true)
{
FDamageEvent DamageEvent;
HitResult.GetActor()->TakeDamage(50.f, DamageEvent, GetController(), this);
}
}
...
}
float ASPlayerCharacter::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator,
AActor* DamageCauser)
{
float FinalDamageAmount = Super::TakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser);
if (ShowAttackDebug == 1)
{
UKismetSystemLibrary::PrintString(this, FString::Printf(TEXT("%s was taken damage: %.3f"), *GetName(), FinalDamageAmount));
}
return FinalDamageAmount;
}
...
'게임 엔진 > [코드조선] 언리얼' 카테고리의 다른 글
언리얼 AI - Behavior Tree, Blackboard (0) | 2024.05.16 |
---|---|
언리얼 AI - AIController (0) | 2024.05.16 |
언리얼 Collision - Draw Debug (+ Console Command) (0) | 2024.05.15 |
언리얼 Collision - 충돌 감지 (0) | 2024.05.15 |
언리얼 Collision - 충돌 설정 (0) | 2024.05.15 |