0. 개요
몬스터 또는 플레이어 캐릭터의 체력이 0이 되었을 때 사망 몽타주를 재생하고 월드에서 제거하도록 한다.
1. 죽음
죽음은 플레이어와 몬스터 캐릭터 모두 실행되므로 CombatInterface와 AuraCharacterBase를 이용할 수 있다.
(1) 인터페이스 구현
virtual void Die() = 0;
};
(2) 랙돌 멀티캐스트 RPC - AuraCharacterBase
virtual void Die() override;
// 랙돌 멀티캐스트 RPC
UFUNCTION(NetMulticast, Reliable)
virtual void MulticastHandleDeath();
랙돌 효과가 발동한 것을 클라이언트에게 알리기 위해서 RPC를 생성한다.
void AAuraCharacterBase::MulticastHandleDeath_Implementation()
{
// 무기 랙돌
Weapon->SetSimulatePhysics(true);
Weapon->SetEnableGravity(true);
Weapon->SetCollisionEnabled(ECollisionEnabled::PhysicsOnly);
// 캐릭터 랙돌
GetMesh()->SetSimulatePhysics(true);
GetMesh()->SetEnableGravity(true);
GetMesh()->SetCollisionEnabled(ECollisionEnabled::PhysicsOnly);
GetMesh()->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Block); // worldstatic에 대해 부딫힘
// 캐릭터 충돌 비활성화
GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}
랙돌 효과를 위해 콜리전과 중력, 물리학 계산에 대한 옵션을 지정한다.
(3) 무기 떨어트리고 랙돌 재생하기
void AAuraCharacterBase::Die()
{
// 서버에서 실행되는 함수
// 무기 떨어트림
Weapon->DetachFromComponent(FDetachmentTransformRules(EDetachmentRule::KeepWorld, true));
// 랙돌 재생
MulticastHandleDeath();
}
(4) 몬스터 클래스에 죽음 오버라이드
몬스터 클래스의 수명을 설정하고 랙돌 효과를 발생시키는 부모의 Die 함수를 호출한다.
UPROPERTY(EditAnywhere, BlueprintReadOnly, category = "Combat")
float LifeSpan = 5.f;
void AAuraEnemy::Die()
{
// 수명 설정
SetLifeSpan(LifeSpan);
// 랙돌 효과와 무기 드랍
Super::Die();
}
(5) PostGameplayEffectExecute - AuraAttributeSet
이 함수는 게임플레이 이펙트가 발동한 후에 호출된다.
if (LocalIncomingDamage > 0.f)
{
const float NewHealth = GetHealth() - LocalIncomingDamage;
SetHealth(FMath::Clamp(NewHealth, 0, GetMaxHealth()));
const bool bFatal = NewHealth <= 0.f;
if (bFatal)
{
ICombatInterface* CombatInterface = Cast<ICombatInterface>(Props.TargetAvatarActor);
if (CombatInterface)
{
CombatInterface->Die();
}
}
else
{
FGameplayTagContainer TagContainer;
TagContainer.AddTag(FAuraGameplayTags::Get().Effects_HitReact);
// 부여된 어빌리티를 찾아서 활성화
Props.TargetASC->TryActivateAbilitiesByTag(TagContainer);
}
}
치명적인 상태인 bFatal가 true일 경우 전투 인터페이스를 가져와 Die를 호출한다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
11-8. UI - (8) 플로팅 텍스트 위젯 - 데미지 표현 (0) | 2024.12.19 |
---|---|
11-7. 몬스터 - (4) 시체에 디졸브 효과 추가하기 (0) | 2024.12.18 |
11-5. 몬스터 - (2) 피격 반응 게임플레이 어빌리티 부여 및 활성화 (0) | 2024.12.18 |
11-4. 몬스터 - (1) 피격에 대한 반응 - 게임플레이 어빌리티 생성 (0) | 2024.12.18 |
11-3. 게임플레이 어빌리티 - (4) 어빌리티 레벨에 따른 데미지 적용 (0) | 2024.12.18 |