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

몬스터 마무리 - 1) GameplayCue를 통한 피격 효과 재생

monstro 2025. 10. 9. 17:59
728x90
반응형

- 개요

GameplayCueGAS 프레임워크 중에서 시각적 + 청각적 기능을 담당한다

GameplayCue 태그로 시작하는 태그를 통해 발동하며 GameplayCueParameter를 통해 정보를 전달할 수 있다

GC는 데디케이트 서버에서는 사용하지 않지만, 리슨 서버에서는 사용하고 기본적으로 Replicate된다

 

따라서 GC를 사용하여 피격과 관련된 시각 효과 + 청각 효과를 재생한다

이를 위해 기존에 만든 TaggedMontage 구조체의 구조다음과 같이 수정한다

  • MontageTag : 연관된 애니메이션 몽타주의 AnimNotify 이벤트를 발생시키기 위한 Tag
  • SocketTag : GC를 통해 재생한 Niagara 파티클을 생성할 소켓을 지정하는 Tag
  • ImpactSound : GC를 통해 재생할 Sound를 설정

 

1) C++ 사이드

1 - 1) AuraGameplayTags 클래스

AnimNotify 태그 변경

 

변경한 AnimNotify 태그 생성

 

기존에 사용하던 AnimNotify 태그를 위와 같이 변경하였다

사용하는 공격 애니메이션 몽타주의 개수만큼 AnimNotity 태그를 사용하도록 설정한다

 

1 - 2) CombatInterface 클래스

TaggedMontage 구조체

 

위와 같이 TaggedMontage 구조체에 멤버변수를 추가하였다

각각 다음의 역할을 수행한다

  • MontageTag : 애니메이션 몽타주의 AnimNotify 이벤트를 발생시키는 태그
  • SocketTag : GameplayCue에서 생성한 Niagara 파티클이 위치한 Socket을 지정하는 태그
  • ImpactSound : GameplayCue에서 재생할 사운드

 

CombatInterface에 2개의 함수 추가

 

CombatInterface 클래스2개의 함수를 추가하였다

  • GetBloodEffect 함수 : 피격되면 생성할 Niagara 파티클을 반환하는 함수
  • GetTaggedMontageByTag 함수 : 인자로 받은 Tag를 사용하여 TaggedMontage를 반환하는 함수

 

1 - 3) AuraCharacterBase 클래스

CombatInterface에 추가한 함수 오버라이드

 

CombatInterface에 추가한 2개의 함수를 위와 같이 오버라이드한다

 

멤버 변수 추가

 

피격되면 생성할 NiagaraSystem을 멤버변수로 추가한다

 

오버라이드한 로직

 

2개의 함수를 오버라이드한 로직은 위와 같다

  • GetBloodEffect 함수 : BloodEffect 멤버변수를 반환
  • GetTaggedMontageByTag 함수 : AttackMontages를 순회하면서 인자로 받은 Tag를 가졌다면 반환

 

1 - 3) AuraProjectile 클래스

SpawnProjectile 함수 수정

 

SpawnProjectile 함수를 위와 같이 수정하여 투사체를 생성할 소켓을 지정한다

 

2) 블루프린트 사이드

2 - 1) 캐릭터 블루프린트 관련 수정

공격 애니메이션 몽타주의 AnimNotify 태그 수정

 

AttackMontages 패널 관련 설정

 

BloodEffect 멤버변수 설정

 

위와 같이 캐릭터 블루프린트에서 필요한 설정을 진행한다

 

2 - 2) GA_MeleeAttack 블루프린트

첫 번째 수정사항

 

공격이 피격된 경우에만 GC를 생성할 수 있도록 HasHitTarget 변수를 False로 초기화한다

 

두 번째 수정사항

 

위와 같이 TaggedMontage를 가져온 후MontageTag를 사용하여 AnimNotify 이벤트를 호출하고,

SocketTag를 사용하여 CombatSocketLocation을 가져오도록 로직을 수정한다

 

세 번째 수정사항

 

CombatSocketLocation을 기준으로 SphereTrace된 적에게 데미지 GE를 적용한 다음

HasHitTarget 불리언 변수를 True로 설정하여 GameplayCue를 생성할 수 있도록 로직을 추가한다

 

네 번째 수정사항

 

SphereTrace 결과물을 전부 순회한 이후 HasHitTarget에 따라 위의 로직을 진행한다

  • False : 어빌리티를 종료
  • True : GameplayCueParameter를 생성 + GameplayCue.MeleeAttackGameplayCue를 실행
    • SourceObjectCombatTarget(GA의 타겟)으로 설정
    • EffectCauserAvatarActor로 설정
    • LocationCombatSocketLocation으로 설정
    • AggregatedSourceTagsTaggedMontage의 MontageTag로 설정

 

2 - 3) GC_MeleeImpact 블루프린트

첫 번째 로직

 

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

반환된 GameplayCueParameters를 분리하여 Location / EffectCauser / SourceObject를 캐싱한다

이후 AggregatedSourceTags를 순회한다

 

두 번째 로직

 

순회하는 MontageTag를 사용하여 EffectCauserTaggedMontage를 가져온다

  • EffectCauserCombatSocketLocation에서 ImpactSound를 재생
  • SourceObjectBloodEffect를 가져와 CombatSocketLocation에서 생성

 

- 최종 실행 결과

 

728x90
반응형