전투 VFX 작업
1. 상태이상 VFX (Burn / Cold)
- 방식: 머티리얼 overlay 틴트 + Niagara 파티클 (GameplayCue 기반)
- 태그:
GameplayCue.Status.Burn / GameplayCue.Status.Cold (네이티브, RetrieveGameplayTags)
- 머티리얼:
M_StatusOverlay(부모, Unlit·Additive·Fresnel 발광) + MI_StatusBurn / MI_StatusFrost
- notify:
GCN_Status_Burn/Cold (Looping)
- OnActive: 타깃 메시에
SetOverlayMaterial + NS 스폰
- OnRemove: overlay 해제 + 스폰 컴포넌트 정리
- 몸 전체 커버: NS에 Skeletal Mesh Location 모듈 +
User.Mesh DI
- CPU sim은 메시에 Allow CPU Access 필요 → GPU sim으로 전환해 해결
- 1초 주기 펄스: EmitterState Loop 1s + SpawnBurst + SpawnRate off
2. 타격 임팩트 VFX (Hit Impact)
- 방식: 데미지 GE에 burst GameplayCue
- 태그:
GameplayCue.Combat.Hit (네이티브)
- 연결:
GE_BasicHitDamage → Gameplay Cues 컴포넌트에 태그 추가
- notify:
GCN_Hit_Impact (burst / GameplayCueNotify_Static)
- OnExecute: 타격 지점에 임팩트 NS 스폰
- 위치는
Params.Location이 비어 있음 → EffectContext의 HitResult ImpactPoint/Normal 사용
- 발광:
VFX_Color를 HDR(>1)로 + Bloom 활성
- 원소별 색: EffectContext → Get Instigator Actor → PlayerState →
GetCurrentElementTag → 색 매핑 → VFX_Color(활성화 전 세팅)
핵심 함정
- GameplayCue/태그는 네이티브로 관리 (RetrieveGameplayTags + 리빌드). monolith 런타임 config 태그 핫-추가는
GameplayTags.dll 크래시 유발.
- GameplayCueNotify OnRemove: 사망 시
MyTarget·스폰 컴포넌트가 무효화될 수 있음 → IsValid 가드 필수.
- Niagara DI / User 파라미터(메시·색)는 Activate 전에 세팅 (비활성 스폰 → set → Activate). 안 그러면 첫 버스트에 안 먹음.
- GE로 발동된 cue의
Params.Location은 자동으로 안 채워짐 → EffectContext의 HitResult에서 가져올 것.
- Static cue에서
GetPlayerState(인덱스)는 월드 컨텍스트가 없어 실패 → EffectContext의 Instigator 사용.
- CPU Niagara 스켈레탈 메시 샘플링은 Allow CPU Access 필요, GPU sim이면 불필요.