TakeDamage() 함수
감지된 액터에 데미지를 전달하기 위한 데미지 프레임워크가 제공된다
그중 대표적인 것이 AActor::TakeDamage() 함수이다
TakeDamage() 함수는 총 네 개의 인자를 가진다
- DamageAmount
전달할 데미지의 양
- DamageEvent
데미지의 종류
- EventInstigator
데미지를 발생시킨 컨트롤러 ex. 플레이어컨트롤러, AI컨트롤러, nullptr
- DamageCauser
데미지 전달을 위해 사용한 액터 ex. 총알, 폭탄, 몬스터, 함정
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 |