언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

데미지 처리 - 3) 입은 데미지의 시각화 + 죽음 처리

monstro 2025. 8. 28. 17:21
728x90
반응형

- 개요

플레이어가 몬스터를 공격하게 되면 입힌 데미지의 위젯을 팝업한다

공격받은 대상의 체력이 0으로 떨어지게 되면 공격받은 대상죽음을 처리하는 함수를 호출하고

죽게 되면 시각 효과를 연출하면서 사라지는 기믹을 추가한다

 

1) CombatInterface 클래스

 

Die 함수를 만들어 공격받은 대상해당 함수를 호출하여 로직을 처리할 수 있도록 설계한다

 

2) AuraCharacterBase 클래스

 

죽음을 처리하기 위한 함수를 위와 같이 추가한다

  • Die 함수 : 오버라이드하여 죽음 이후의 로직을 처리
  • MulticastHandleDeath 함수 : 죽은 대상을 구성하는 여러 컴포넌트를 제거하는 함수
    • NetMulticast 속성 : 함수를 RPC로 사용하여 클라이언트에서 함수를 호출하고 서버에서 수행
    • Reliable 속성 : RPC의 실행이 완전하도록 보장, 단 자주 사용하면 부하가 발생하므로 주의

 

 

죽은 이후의 시각 효과를 처리하기 위한 멤버 함수와 멤버 변수를 추가한다

  • Dissolve 함수 : MaterialInstance 멤버변수를 사용하여 소멸하는 효과를 연출하는 함수
  • StartDissolveTimeline 함수 : 캐릭터소멸하는 효과 연출
    • BlueprintImplementableEvent 속성을 사용하여 블루 프린트에서 함수를 오버라이드
    • DissolveMaterialInstance : 캐릭터의 소멸 VFX
  • StartWeaponDissolveTimeline 함수 : 무기 소멸하는 효과 연출
    • BlueprintImplementableEvent 속성을 사용하여 블루 프린트에서 함수를 오버라이드
    • WeaponDissolveMaterialInstance : 무기의 소멸 VFX

 

 

Die 함수의 로직은 위와 같다

무기캐릭터로부터 분리하고, MulticastHandleDeath 함수를 호출한다

 

 

MulticastHandleDeath 함수 RPC로서, 정의할 때 _Implementation을 수식해야 한다

로직은 다음과 같은데,

캐릭터의 무기캐릭터에게 물리를 적용하여 땅에 떨어지게끔 설정하고, CapsuleCollision을 해제한다

이후 Dissolve 함수를 호출한다

 

 

Dissolve 함수의 로직은 다음과 같다

무기의 소멸 효과캐릭터의 소멸 효과를 의미하는 멤버 변수가 유효하면 재생한다

 

3) AuraEnemy 클래스

 

Die 함수를 추가하여 오버라이드한다

 

 

LifeSpan 멤버 변수를 추가하여 몬스터가 쓰러진 후 LifeSpan이 지난 후에 몬스터의 Actor를 제거한다

 

 

Die 함수를 위와 같이 오버라이드한다

LifeSpan 멤버 변수를 적용하고, 부모인 AuraCharaterBase의 Die 함수를 호출한다

 

4) AuraAttributeSet 클래스

 

ShowFloatingText 함수를 추가하여 플레이어가 입힌 데미지의 위젯을 팝업할 수 있도록 설정한다

 

 

HandleIncomingDamage 함수를 위와 같이 수정한다

  • 공격받은 대상이 쓰러진 경우, CombatInterface로 캐스팅하여 Die 함수를 호출한다
  • 플레이어로부터 공격받았다면, ShowFloatingText 함수를 호출하여 입힌 피해의 위젯을 팝업한다

 

 

ShowFloatingText 함수의 로직은 위와 같다

GameplayEffect의 SourceCharacter를 가져와 PlayerController로 캐스팅한다

문제없이 캐스팅되었다면, ShowDamageNumber 함수를 호출하여 입힌 피해의 위젯을 팝업한다

 

5) DamageTextComponent 클래스

 

DamageTextComponent 클래스는 위와 같이 구성하였다

SetDamageText 함수를 통해 위젯에 작성할 텍스트를 설정할 수 있다

 

6) AuraPlayerController 클래스

 

ShowDamageNumber 함수를 추가하여 플레이어가 입힌 피해의 위젯을 팝업한다

해당 동작은 서버에서 호출되어 클라이언트에서 수행한다

 

 

팝업할 위젯 컴포넌트를 위와 같이 멤버 변수로 설정할 수 있다

 

 

ShowDamageNumber 함수의 로직은 위와 같다

팝업할 위젯 컴포넌트를 NewObject로 생성하고 생성한 위젯 컴포넌트 오브젝트에 작성할 텍스트를 설정한다

 

7) 언리얼 에디터

7 - 1) BP_EnemyBase 블루프린트

 

StartDissolveTimeline 함수와 StartWeaponDissolveTimeline 함수를 오버라이드하여

적합한 소멸 효과 VFX를 실행할 수 있도록 설정한다

 

7 - 2) 몬스터 블루프린트

 

몬스터의 캐릭터가 소멸하는 효과와 무기가 소멸하는 효과를 위와 같이 설정한다

 

7 - 3) BP_DamageTextComponent 블루프린트

 

SetDamageText 함수를 오버라이드하여 WBP_DamageText에서 입힌 피해만큼의 텍스트를 작성하도록 설정한다

 

7 - 4) WBP_DamageText 위젯 블루프린트

UpdateDamageText 함수

 

위와 같이 함수를 구성하여 위젯의 텍스트를 설정한다

 

 

해당 위젯이 생성되면 위젯의 애니메이션을 재생하도록 설정한다

 

7 - 5) BP_AuraPlayerController 블루프린트

 

위와 같이 위젯 컴포넌트를 설정한다

 

- 최종 실행 결과

 

728x90
반응형