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

몬스터 근접 공격 - 최종) 애니메이션 몽타주와 소켓 연결 및 개선

monstro 2025. 9. 28. 18:07
728x90
반응형

- 개요

애니메이션 몽타주에서 설정한 AnimNotify의 태그를 통해 Sphere Trace를 진행할 소켓을 가져오도록 구성한다

또, 코드 구조를 일부 개선하여 몬스터끼리 공격하지 않도록 설정하고 

블루 프린트를 일부 수정하여 피격 GA가 발동하면 공격 GA를 중단하도록 설정한다

 

1) C++ 코드 작업

1 - 1) AuraGameplayTags 클래스

Trace할 소켓들의 Tag

 

추가한 Tag들을 생성

 

위와 같이 무기 / 오른손 / 왼손의 소켓들을 가져오기 위한 Tag를 추가한다

 

1 - 2) CombatInterface 클래스

 

GetCombatSocketLocation 함수에서 위와 같이 MontageTag를 인자로 받도록 수정한다

따라서 AnimationNotify의 태그와 연결된 소켓의 위치를 반환할 수 있다

 

1 - 3) AuraCharacterBase 클래스

오버라이드한 CombatInterface의 함수를 수정

 

무기 외에 왼손 / 오른손 소켓 이름을 설정하는 멤버변수

 

위와 같이 코드를 변경한다

 

 

GetCombatSocketLocation 함수의 오버라이드한 로직을 위와 같이 변경한다

로직은 다음과 같다

  • AnimNotify의 태그가 Weapon인 경우 : 무기의 WeaponTipSocketName이라는 이름의 소켓의 위치를 반환
  • AnimNotify의 태그가 LeftHand인 경우 : LeftHandSocketName이라는 이름의 소켓의 위치를 반환
  • AnimNotify의 태그가 RightHand인 경우 : RightHandSocketName이라는 이름의 소켓의 위치를 반환

 

1 - 4) AuraProjectileSpell 클래스

 

SpawnProjectile 함수에서 투사체를 생성하는 소켓의 위치를 설정하는 로직을 위와 같이 수정한다

 

1 - 5) AuraAttributeSet 클래스

 

HandleIncomingDamage 함수에서 위의 로직을 추가하여

피격당한 적이 HitReact 태그와 연결된 피격 어빌리티를 발동하도록 설정한다

 

1 - 6) AuraEnemy 클래스

 

BaseWalkSpeed 멤버변수에 EditAnywhere 속성을 사용하도록 설정한다

따라서 몬스터에 따라서 기본 이동속도를 조정할 수 있다

 

1 - 7) AuraAbilitySystemLibrary 클래스

대상 캐릭터의 타입이 나와 같은지 확인하는 함수

 

 

IsNotFriend 함수의 로직은 위와 같다

대상이 나와 같지 않은 경우 True를 반환하고, 같다False를 반환한다

해당 함수를 사용하여 플레이어 - 플레이어 / 몬스터 - 몬스터서로를 공격하지 않도록 설정할 수 있다

 

2) 언리얼 에디터

2 - 1) 캐릭터의 블루프린트

고블린 창병

 

구울

 

플레이어

 

위와 같이 피격 판정을 위한 Sphere Trace를 진행할 소켓의 이름을 설정한다

플레이어는 Trace를 진행하지 않지만, 일단 설정한다

 

2 - 2) BP_Ghoul 블루프린트

애니메이션 몽타주 - AnimNotify의 태그

 

위와 같이 AnimNotify의 태그를 설정한다

 

 

이후 AttackMontages 멤버변수애니메이션 몽타주 - AnimNotify의 태그로 짝지어 설정한다

 

2 - 3) GA_HitReact 블루프린트

 

Cancel Abilities With Tag 설정을 위와 같이 진행하여 피격된다면 공격 어빌리티를 중단하도록 설정한다

 

2 - 4) GA_MeleeAttack 블루프린트

로직 수정 (1)

 

몬스터의 AttackMontages에서 랜덤하게 가져온 값TaggedMontage 변수로 저장하여 사용하도록 변경한다

 

로직 수정 (2)

 

애니메이션 몽타주가 Completed / Interuppted / Cancelled되면 근접공격 어빌리티를 중단한다

 

로직 수정 (3)

 

Sphere Trace된 대상을 순회하는 로직에서 IsNotFriend 함수를 호출하여

Trace된 대상이 나와 다른 경우에만 CauseDamage 함수를 수행하여 데미지를 주는 GE를 적용하도록 수정한다

 

- 최종 실행 결과

 

728x90
반응형