관리 메뉴

Mini

[UE5] 적 죽음 구현 본문

UE5/Damage

[UE5] 적 죽음 구현

Mini_96 2024. 6. 23. 16:08

* 어디에구현?

적, 캐릭터가 모두사용 -> 전투인터에 만들고 캐릭베이스에서 구현강제 할거임

class AURA_API ICombatInterface
{
   ...

    virtual void Die()=0;

 

void AAuraCharacterBase::Die()
{
    //무기분리, 분리는자동으로 수행 -> 서버에서분리하면 클라에서도 자동분리
    Weapon->DetachFromComponent(FDetachmentTransformRules(EDetachmentRule::KeepWorld,true));
    MulticastHandleDeath();
}

void AAuraCharacterBase::MulticastHandleDeath_Implementation()
{
    //무기, 매시에 피직스 달기 => 땅에서 튕겨나오도록
    Weapon->SetSimulatePhysics(true);
    Weapon->SetEnableGravity(true);
    Weapon->SetCollisionEnabled(ECollisionEnabled::PhysicsOnly);

    GetMesh()->SetEnableGravity(true);
    GetMesh()->SetSimulatePhysics(true);
    GetMesh()->SetCollisionEnabled(ECollisionEnabled::PhysicsOnly);
    GetMesh()->SetCollisionResponseToChannel(ECC_WorldStatic,ECR_Block);
    
    //캡슐충돌 비활성화
    GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}

여기 매쉬의 중력을 true로 해서 땅바닥에 붙어있도록 만드는 원리인듯?

 

- 적의경우 수명설정 추가

void AAuraEnemy::Die()
{
    //적의경우 수명설정
    SetLifeSpan(LifeSpan);
    Super::Die();
}

- AS 에서 뒤지는경우, Die 호출

void UAuraAttributeSet::PostGameplayEffectExecute(const FGameplayEffectModCallbackData& Data)
{
    ...
    if(Data.EvaluatedData.Attribute==GetIncomingDamageAttribute())
    {
       const float LocalIncomingDamage = GetIncomingDamage();
       SetIncomingDamage(0.f);
       if(LocalIncomingDamage > 0.f)
       {
          const float NewHealth = GetHealth() - LocalIncomingDamage;
          SetHealth(FMath::Clamp(NewHealth,0.f,GetMaxHealth())); //음수인경우 조정하고 체력깍기

          const bool bFatal = NewHealth<=0.f; //사망에이를만한 피해인지
          
          if(bFatal) //뒤지는 경우
          {
             //타겟아바타가 인터구현했는지 확인
             ICombatInterface* CombatInterface=Cast<ICombatInterface>(Props.TargetAvatarActor);
             if(CombatInterface)
             {
                CombatInterface->Die();
             }
          }

결과 : 무기를 떨구고 죽음 && 5초후 소멸!!

 

https://github.com/DongHoonYu96/GameplayAbilitySystem_Aura/commit/891b1dca4c9ceca22d657f629058e4a388e5c1bc

 

feat : 적 죽음 구현 · DongHoonYu96/GameplayAbilitySystem_Aura@891b1dc

Bisu96 committed Jun 23, 2024

github.com