[Unreal]#10_Damage + Health 구현
Unreal 개발 중 "Gun Actor"에 대해 알아보겠습니다.
"Simple Shooter Game"의 Character Class 개발 과정 중 일부입니다.
Health
1. AShooterCharacter.h
// Character.h 내부...
class Character : public ACharacter
{
//...
public:
virtual float TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) override;
// BlueprintPure와 const는 같이 갑니다.
// BlueprintPure = No Execution Pin -> Always have same result or effect on program
UFUNCTION(BlueprintPure)
bool IsDead() const;
private:
UPROPERTY(EditAnywhere)
float MaxHealth = 100;
UPROPERTY(EditDefaultsOnly)
float Health;
};
- IsDead 메서드 선언
- MaxHealth, 최대 체력 변수 선언
- Health, 현재 체력 변수 선언
2. AShooterCharacter.cpp
// Character.cpp 내부...
void AShooterCharacter::BeginPlay()
{
//...
Health = MaxHealth;
}
float AShooterCharacter::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser)
{
// 상위 클래스의 메서드를 먼저 호출합니다.
float DamageToApply = Super::TakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser);
// Health 값이 0이 될 때까지만 감소합니다.
DamageToApply = FMath::Min(Health, DamageToApply);
Health -= DamageToApply;
if(IsDead() == true)
{
DetachFromControllerPendingDestroy();
GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}
return DamageToApply
}
bool AShooterCharacter::IsDead() const
{
if(Health <= 0)
return true;
else
return false;
}
virtual void APawn::DetachFromControllerPendingDestroy()
- Controller로부터 Pawn을 안전하게 떼어 놓기 위한 메서드입니다.
GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
- Character의 캡슐 컴포넌트를 가져와 Collision 기능을 꺼버립니다.
'게임개발 > Unreal C++' 카테고리의 다른 글
[Unreal]#12_Aim Offset(Pitch 값 설정), Delta Rotator 활용 (0) | 2022.08.29 |
---|---|
[Unreal]#11_Blend Pose By Boolean, BlueprintPure (0) | 2022.08.29 |
[Unreal]#9-2_Shooting 설계 및 구현 (0) | 2022.08.20 |
[Unreal]#9-1_Shooting 설계 및 구현 (0) | 2022.08.17 |
[Unreal]#8_Attach Gun Actor to Shooter Character (0) | 2022.08.16 |