언리얼 데미지에 관하여

roberto·2025년 2월 13일

데미지를 받을 때

  • 언리얼 엔진의 api에 대해 알면 알수록 놀랍다. 그리고 정말 친절하구나 싶다가도 정말 불친절해 보일 때가 있다.

  • 많은 수의 게임에서 빼놓을 수 없는 요소인 데미지 입력 부분이 이미 구현되어 있었다.

virtual float TakeDamage(float DamageAmount, 
struct FDamageEvent const& DamageEvent, 
AController* EventInstigator, 
AActor* DamageCauser) override;

파라미터가 좀 많다.

  • DamageAmount : 받는 피해량
  • DamageEvent : 데미지의 유형, 점공격, 범위공격은 이미 구현이 되어있고, 따로 정의를 통해서 추가도 가능하다.
  • EventInstigator : 피해를 유발한 AController
    ex) 총알에 맞아 데미지를 받았을 경우, 총을 발사한 사람
  • DamageCauser : 피해를 직접적으로 준 Actor
    ex) 총알

데미지를 줄 때

  • 데미지를 주는 것 역시 상당히 간편하게 되어있다.
UGameplayStatics::ApplyDamage(Actor, 
Damage, 
nullptr, 
this, 
UDamageType::StaticClass());

UDamageType과 FDamageEvent에 대해서만 잘 알면 좋다.

    if (DamageEvent.DamageTypeClass == UMyFireDamageType::StaticClass())
    {
        UE_LOG(LogTemp, Warning, TEXT("🔥 화염 피해 적용됨!"));
        StartBurnEffect();  // 화염 효과 적용
    }

이런 식으로 DamageEvent안에 DamageType을 읽어내서 처리하면 된다.

profile
아마도 개발 관련된 것만 올릴듯한 벨로그

0개의 댓글