GameplayCue

Jangmanbo·2025년 8월 11일

FGameplayAbilityTargetDataHandle
누가 맞았는지 피격 정보..

OnRangeWeaponTargetDataReady..

GameplayCueNotify: 피격됐으면 피를 튀긴다던가 하는 동작들을 수행

GameplayCue도 GameplayTag를 통해서 실행시킴
GameplayCueParameters에 정보를 실어 보냄..

HitResult를 GameplayCueParameters로 변경

  • GCN Pamameter에 캐싱

GameplayCueTag에 해당하는 Cue를 GCN Pamameter에 캐싱한 정보에 기반해서 실행

GameplayCueManager를 통해 Cue를 관리한다
Cue는 매우 많이 사용하는데 사용할 때마다 생성하는 건 비효율적이니까


아무튼 타고타고 들어가다보면 GameplayCueDataMap에서 Tag를 통해 Cue를 찾아서 실행한다

그렇다면 어떻게 GameplayCueDataMap에 CueNotify를 추가할까

GameplayCueManager::GameplayCueDataMap에 CueNotify 추가

GameFeatureAction으로 GameplayCueDataMap에 CueNotify를 추가한다


이렇게 만든 액션을 일반적으로는 experience에서 액티브하지만..
experience 로드시에 액션을 불러오는 거는 너무 느리며 이런 이펙트는 experience, 즉 모드가 변경된다고 달라지지 않는 경우가 많다

따라서 AddGameplayCuePaths 액션은 GameFeaturePolicy로 게임피쳐를 로드할 때 실행한다

부모인 GameFeaturesProjectPolicies는 GameFeatureSystem보다 쉽게 게임피쳐의 규칙을 만들 수 있도록 한다.
여기에 InitGameFeatureManager, ShutdownGameFeatureManager 같은 함수들이 있어서 얘네 오버라이드

여기 있는 Observers에 대해 알아보기

IGameFeatureStateChangeObserver를 상속받음

Init에서 GameFeature_AddGameplayCuePaths를 생성해서 GameFeatureSubsystem에 옵저버로 등록된다 (이 시점이 매우 빠름.. 엔진이 실행되기 전이라고 한다)
이렇게 하면 GameFeature들이 등록/해제 되는 타이밍에 GameFeature_AddGameplayCuePaths로 이벤트가 올 것이다


이제 OnGameFeatureRegistering, OnGameFeatureUnregistering에서 본래 목적이었던 GameplayCueManager의 GameplayCueDataMap에 Cue를 등록/제거한다

GameFeatureData에서 AddGameplayCuePath 액션을 찾아서 해당 path 내의 cue들을 등록한다

GCM->RefreshGameplayCuePrimaryAsset에서 AssetManager 등록까지 해준다
즉, 여기서 GameplayCueManager, AssetManager 둘 다에 한 번에 등록한다

---정리

GameplayCueNotify

GameplayCueNotify 클래스들 (Looping이면 반복, Burst면 단발성, ..)

GameplayCueNotify를 만들어서 여기서 현재 pawn에 붙어있는 무기(B_Weapon을 상속받은 어떤 무기)의 Fire이벤트를 호출한다

이펙트 플레이

B_Weapon의 Fire이벤트

무기를 썼을 때의 각 이펙트 담당한다
B_Weapon에서 이 액터 3개를 스폰하고 내부 이벤트를 호출해서 이펙트를 플레이한다

0개의 댓글