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

몬스터 근접 공격 - 3) 플레이어의 피격 여부 판단

monstro 2025. 9. 27. 01:37
728x90
반응형

- 개요

몬스터의 근접 공격애니메이션 몽타주에 포함된 AnimNotify를 호출하여 플레이어가 피격되었는지 판단한다

 

1) DefaultGameplayTags.ini

 

에디터 또는 DefaultGameplayTags.ini 파일에 위의 태그를 추가한다

해당 태그를 통해 근접 공격애니메이션 몽타주에서 AnimNotify를 호출한다

 

2) CombatInterface 클래스

 

전투와 관련한 동작을 수행하는 CombatInterface 클래스2개의 함수를 추가한다

  • IsDead 함수 : 공격한 대상이 쓰러졌는지 판단
  • GetAvatar 함수 : 공격받은 대상의 클래스를 반환

 

3) AuraAbilitySystemLibrary 클래스

 

GetLivePlayersWithinRadius 함수를 추가한다

해당 함수를 호출하여 Sphere Trace를 수행하여 오버랩된 플레이어가 존재하는지 판단한다

 

 

함수의 로직은 다음과 같다

  • 인자로 받은 ActorsToIgnore에 대해서는 Trace를 하지 않도록 설정
  • World로부터 SphereTrace를 수행
  • 수행한 결과를 순회하면서 CombatInterface를 상속받았으면서 + IsDead의 반환값false라면
    • GetAvatar 함수를 호출하여 반환된 대상인자로 받은 OutOverlappingActors 단일값으로 추가

 

4) AuraCharacterBase 클래스

CombatInterface 함수 오버라이드 + 멤버변수 추가

 

오버라이드한 로직

 

위와 같이 CombatInterface의 함수를 오버라이드하고, bDead 멤버변수를 추가한다

 

5) 언리얼 에디터

5 - 1) AM_Attack_GoblinSpear 애니메이션 몽타주

AnimNotify 전용 트랙 추가

 

해당 AnimNotify의 Event 태그 설정

 

위와 같이 AnimNotify의 트랙을 추가하고 적합한 키 프레임에 AnimNotify를 설정한다

해당 AnimNotify의 이벤트 태그를 위와 같이 설정한다 

 

5 - 2) BP_Goblin_Spear 블루프린트

 

Sphere Trace를 수행할 Socket의 이름을 위와 같이 설정한다

 

 

해당 Socket은 고블린 창병의 창 메쉬의 끝부분을 의미한다

 

5 - 3) GA_MeleeAttack 블루프린트

 

애니메이션 몽타주 재생 이후의 로직을 위와 같이 추가한다

다음과 같이 축약할 수 있다

  • AnimNotify에서 설정한 이벤트가 발동
  • 창 메쉬의 끝부분을 기준으로 Sphere Trace 수행
  • 수행결과를 for each문으로 순회하면서 Debug Sphere 생성

 

- 최종 실행 결과

 

728x90
반응형