[Day 5] AI Monster with C++(2)

베리투스·2025년 8월 8일

TIL: Today I Learned

목록 보기
13/93

📌 목표

  • 몬스터와 플레이어가 서로 피해를 주고받을 수 있는 전투 시스템 구현
  • AI의 공격이 플레이어 체력을 깎고, 체력이 0이 되면 사망 처리
  • 플레이어의 총알이 몬스터를 타격했을 때 몬스터 체력 감소 및 사망 처리

🧱 Step 1: 체력(Health) 시스템 추가

몬스터(MonsterCharacter.h)

UPROPERTY(EditAnywhere, Category="Combat")
float MaxHealth = 100.f;

float CurrentHealth;

초기화

AMonsterCharacter::AMonsterCharacter()
{
    CurrentHealth = MaxHealth;
}

⚔ Step 2: 데미지 받기 (TakeDamage) 구현

float AMonsterCharacter::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent,
    AController* EventInstigator, AActor* DamageCauser)
{
    const float ActualDamage = FMath::Clamp(DamageAmount, 0.f, MaxHealth);
    CurrentHealth -= ActualDamage;

    UE_LOG(LogTemp, Warning, TEXT("몬스터 피격! 남은 체력: %.0f"), CurrentHealth);

    if (CurrentHealth <= 0.f)
    {
        Die();
    }

    return ActualDamage;
}

💀 Step 3: 사망 처리

void AMonsterCharacter::Die()
{
    UE_LOG(LogTemp, Warning, TEXT("몬스터 사망"));
    GetCharacterMovement()->DisableMovement();
    SetLifeSpan(5.f); // 5초 후 제거
}

🔫 Step 4: 공격 로직 보강

AttackPlayer() 수정

void AMonsterCharacter::AttackPlayer()
{
    if (!TargetPlayer) return;
    UGameplayStatics::ApplyDamage(TargetPlayer, 20.f, GetController(), this, UDamageType::StaticClass());
}

🎯 Step 5: 플레이어도 체력 시스템 추가

플레이어 캐릭터(A<YourCharacter>)에 동일하게 MaxHealth, CurrentHealth, TakeDamage, Die() 구현.

UPROPERTY(EditAnywhere, Category="Combat")
float MaxHealth = 100.f;

float CurrentHealth;

float AYourCharacter::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent,
    AController* EventInstigator, AActor* DamageCauser)
{
    CurrentHealth -= DamageAmount;
    if (CurrentHealth <= 0.f)
    {
        Die();
    }
    return DamageAmount;
}

💥 Step 6: 총알(Projectile)에서 데미지 주기

void AMyProjectile::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, ...)
{
    if (OtherActor && OtherActor != this)
    {
        UGameplayStatics::ApplyDamage(OtherActor, 25.f, GetInstigatorController(), this, UDamageType::StaticClass());
    }
    Destroy();
}

✅ 핵심 요약

구성 요소역할
MonsterCharacter공격 시 플레이어 체력 감소, 피격 시 체력 감소 및 사망 처리
PlayerCharacter몬스터 공격 시 체력 감소 및 사망 처리
Projectile피격 대상에 데미지 전달
AIController & BT기존 추적·공격 로직 그대로 사용, 데미지만 연동

profile
Shin Ji Yong // Unreal Engine 5 공부중입니다~

0개의 댓글