내일배움캠프-언리얼

TIL - 95

이시보 2026. 6. 29. 21:46

전투 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이면 불필요.

'내일배움캠프-언리얼' 카테고리의 다른 글

TIL - 97  (0) 2026.07.01
TIL - 96  (0) 2026.06.30
TIL - 94  (0) 2026.06.26
TIL - 93  (0) 2026.06.23
TIL - 92  (0) 2026.06.17