TPS 개발 : 총기 VFX — 가짜 탄 액터와 피격 타이밍
히트스캔 위에 나이아가라 탄 VFX를 얹으며 겪은 리본 트레일, 피격 타이밍, 딜레이 문제 해결기
TPS 개발 - 총기 VFX
총기 VFX를 구현했다. 히트 판정은 히트스캔으로 즉발인데, 거기에 날아가는 탄 연출을 얹는 게 생각보다 훨씬 까다로웠다.
삽질 1 — VFX만 발사하면 피격 판정이 안 맞는다
처음엔 그냥 발사 지점에서 VFX만 쐈다. 그런데 맞았을 때 판정이 안 됐다. VFX는 그냥 시각 효과라 충돌 정보를 안 주니 당연했다.
그래서 VFX의 lifetime을 조정해봤는데, 이렇게 타이밍을 수동으로 맞추려니 너무 빡셌다. 사거리마다 lifetime을 다시 잡아야 하는 지옥이었다.
VFX 파라미터를 하나하나 받아서 동적으로 움직이게도 만들어봤다. 근데 이건 또 원하는 대로 움직이질 않았다.
해결 방향 — 가짜 탄 액터 + 풀링
결국 접근을 바꿨다. 풀링 시스템을 만들어서, 발사 시 날아가는 가상의 탄 액터(FakeBullet)를 두고 거기에 VFX를 붙였다.
1
2
3
4
발사
└─ 풀에서 FakeBullet 액터 꺼내기
└─ 액터에 나이아가라 VFX 부착
└─ 발사 연출
풀링이라 매번 스폰/파괴하지 않아, 연사에도 부담이 없다.
삽질 2 — 리본 트레일이 안 나온다
VFX가 Projectile + Trail 리본 구성이었는데, 리본이 안 나왔다.
원인이 어이없었다. VFX 자체 속도를 0으로 박아두고 액터를 따라가게 만들었더니, 나이아가라가 “리본이 안 움직인다”고 판단해서 트레일을 늘어뜨리지 않은 것이다. 리본은 자기 파티클의 이동이 있어야 그려지는데, 속도 0이라 정지한 걸로 본 셈이다.
해결 — 액터는 고정, VFX가 스스로 날아간다
구조를 다시 잡았다.
- 액터는 플레이어 노즐에 박혀 있는 상태로 둔다.
- 발사되면 VFX를 실행하고, VFX가 자체적으로 1000cm/s로 날아가게 만든다.
- 액터는 그 이동 시간을 역산해서, 마지막 HitResult의 impact 포인트까지만 날아간 뒤 스스로 나이아가라 컴포넌트를 종료시킨다.
1
2
3
4
노즐 고정 액터
└─ 발사 → VFX 자체 속도 1000cm/s로 전진 (리본 살아남)
└─ 액터: impact까지 걸리는 시간 역산
└─ 그 시간 뒤 Niagara Component 종료
VFX가 실제로 움직이니 리본도 살고, 날아가는 느낌도 살았다.
삽질 3 — 피격 VFX 타이밍
이번엔 impact point에 터지는 피격 VFX가 문제였다.
피격 VFX는 맞으면 나타나는 효과인데, 실제로 날아가는 물리 탄이 없으니 정확히 언제 맞았는지를 알 수 없었다. 그래서 여기도 시간에 따른 피격 판정을 넣어서, 탄이 도달했을 법한 시점에 피격 VFX를 터뜨렸다.
딜레이가 심하다
그랬더니 전체가 이상해졌다.
1
2
3
히트스캔으로 쏨 (즉발 판정)
+ FakeBullet Projectile 날아감 (시간 걸림)
+ 피격 포인트 VFX 터짐 (시간 걸림)
맞는 건 즉발인데, 탄알도 피격 이펙트도 다 늦게 작동하니 타격감이 붕 떴다. 데미지는 이미 들어갔는데 연출은 뒤늦게 따라오는 꼴이었다.
해결 — 속도 올리고 이펙트 선행
그래서 전체적으로 속도를 높이고, 탄이 다 날아가기 전에 피격 이펙트가 터지도록 변경했다. 연출이 판정을 너무 정직하게 따라가기보다, 즉발 느낌에 맞춰 살짝 앞당긴 것이다.
오늘 정리
- VFX만으론 피격 판정이 없어 lifetime·파라미터 수동 제어는 한계
- 풀링 + 가짜 탄 액터로 발사 연출 구조화
- 속도 0으로 액터만 따라가면 리본 트레일이 안 그려짐 → VFX가 자체 속도로 이동하게
- 액터는 노즐 고정, VFX는 1000cm/s 전진 후 impact까지 시간 역산해 종료
- 히트스캔(즉발) + 탄 연출 + 피격 VFX의 딜레이 → 속도 상향 + 이펙트 선행으로 타격감 보정