내배캠/GAS(Gameplay Ability System)

GAS_15_GameplayCue로 타격 사운드 재생

동그래님 2025. 5. 10. 21:12

📌 Gameplay Cue로 사운드 재생

피격 당하는 Montage에 피격 당하는 대상의 Sound를 입히는 것은 Montage에서 해결할 수 있지만,
공격을 하는 경우에도 Montage에서 소리를 재생하면 공격이 성공하지 않았는데도 피격 사운드가 날 것이고 이는 어색하게 느껴지게 된다.
공격 모션에는 휘두르는 사운드만 들리게 하고, 타격이 성공 했을 때만 타격 피드백 사운드를 재생할 수 있도록 한다.

🔎 GameplayCue 시스템에서 사용되는 두 가지 타입 클래스 

  1. GameplayCueNotify_Static
    • 정적 클래스(UObject 기반, 액터가 아님)
    • 스폰되지 않고, 메모리 상에서 실행
    • 한 번 실행하고 끝나는 효과에 적합(피격 사운드 재생, 임펙트 스파크 등)
    • Tick이 필요 없고, 따로 씬 상에 남아있을 필요 없을 때
  2. GameplayCueNotify_Actor
    • Actor 기반 클래스
    • 맵에 스폰되어 존재하며 지속적인 처리 가능(Tick, BeginPlay, Destroy 등 지원)
    • 상태에 따라 시작/갱신/종료가 가능한 이펙트
    • 버프/디버프, 지속시간 있는 이펙트 등

✅ Gameplay Cue BP클래스 생성

현재 타격 사운드를 재생하는 것이므로 "GamePlayCueNotify_Static"을 상속 받는 BP 클래스를 생성해준다.

생성한 클래스의 Tag를 살펴보면 아무것도 존재하지 않는다. 따라서 새롭게 GameplayCue 전용 Tag를 추가해야한다. 
이번엔 에디터에서 바로 생성하도록 한다.

 

"GameplayCue.Sounds.MeleeHit.Axe"로 Tag 이름을 입력하고 Source를 "DefaultGameplay Tags.ini로 설정한 뒤 "Add New Tag"를 클릭한다.

 

"On Execute" 함수를 Override해서 다음과 같이 재정의 한다.
Target의 Location에 "Play Sound at Location" 노드를 통해 원하는 사운드를 재생할 수 있도록 한다.

 

✅ Gameplay Ability에 GE 실행 로직 구현

플레이어의 강공격, 약공격 Ability의 데미지 적용 함수에서 "Execute GameplayCue On Owner" 노드에 GC Tag를 변수로 승격 시키고, 자식 클래스에서 해당 변수에 Tag를 할당해준다.

 

✅ DefautGame.ini에 GameplayCue Path 저장

[/Script/GameplayAbilities.AbilitySystemGlobals]
bUseDebugTargetFromHud = true
GameplayCueNotifyPaths = "/Game/GameplayCues"

[/Script/EngineSettings.GeneralProjectSettings]
ProjectID=04AF6AD14CFECE9CD8FFFB86EAF63CE4
CopyrightNotice=
Gameplay Cue를 성공적으로 실행하려면 DefualtGame.ini 파일에 현재 GameplayCue가 들어있는 경로를 추가해야한다.
현재 Content폴더 아래에 바로 GameplayCues 폴더가 있고 해당 폴더 안에 "GC_Hero_AxeHit"이 있으므로 "/Game/GameplayCues" 경로를 위와 같이 저장해주고 에디터를 재시작 해준다.

 

🔔 Gameplay Cue로 타격 사운드 재생 테스트