TIL

[UE5] 타임라인(Timeline)으로 구현하는 부드러운 총기 반동과 에임 복귀

think95592 2026. 4. 22. 16:57

단순히 랜덤 플로트 값을 주던 딱딱한 반동에서 벗어나, 타임라인을 활용해 에임이 부드럽게 튀고 다시 원래 위치로 돌아오는 리얼한 반동 시스템을 구현했습니다. 로직 분리와 예외 처리 과정에서의 기록을 남깁니다.


1. 타임라인: 부드러운 움직임과 반동 복귀의 핵심

함수 내부에서는 타임라인을 사용할 수 없기에 커스텀 이벤트를 활용해 로직을 구성했습니다. 타임라인을 사용했을 때 가장 큰 수확은 두 가지였습니다.

  • 움직임의 부드러움: 에임이 순간이동하지 않고 곡선을 따라 유기적으로 움직입니다.
  • 반동 복귀(Recoil Recovery): 타임라인 그래프에 마이너스(-) 값을 추가하면, 별도의 복잡한 계산 없이도 에임이 상승 후 다시 원래 조준 지점으로 돌아오는 효과를 아주 쉽게 구현할 수 있습니다.

 

2. 축별 반동 제어

  • 수직 반동(Pitch): 타임라인의 상승/하강 곡선을 따라 에임이 위로 튀었다가 다시 아래로 복귀합니다.
  • 좌우 반동(Yaw): 좌우로 랜덤하게 흔들리도록 하되, 조준을 방해하지 않는 선에서 수직 반동보다 낮은 값을 곱해 적용했습니다.


3. 사격 시스템의 논리적 예외 처리

로직을 함수 밖으로 빼면서 발생한 연사 및 탄환 관련 버그들을 해결했습니다.

① 무탄환 상태에서의 반동 억제

탄환이 0인데도 연사 설정 때문에 타임라인(반동)만 계속 작동하는 문제가 있었습니다. 사격 이벤트 진입점에 Branch를 추가하여, 실제 탄환이 있을 때만 타임라인이 실행되도록 방어 로직을 구축했습니다.

② 탄환 소모 로직의 일관성 (Hit 여부 무관)

처음에는 트레이스가 적중했을 때만 탄환이 줄어들게 했으나, 허공 사격 시 탄환이 줄지 않는 버그가 발생했습니다.

  • 수정 내용: Line Trace 결과가 True든 False든 관계없이 모든 실행 경로가 탄환 감소(--) 노드를 거치도록 수정하여 격발 시 무조건 탄환이 소모되게 만들었습니다.


4. 최종 요약 및 교훈

    1. 타임라인에 마이너스 값을 주면 아주 간단하게 반동 복귀를 구현할 수 있다.
    2. 부드러운 에임 이동을 위해서는 함수가 아닌 이벤트 그래프에서의 타임라인 제어가 필수적이다.
    3. 격발 메커니즘은 적중(Hit) 여부가 아닌 실행(Fire) 여부에 따라 리소스를 소모해야 한다.


마치며 타임라인 하나로 반동의 '맛'과 '복귀'를 한 번에 해결할 수 있었습니다. 이제 허공을 쏴도 탄환이 정상적으로 소모되며, 반동 후 에임이 제자리로 돌아오는 안정적인 슈팅 시스템이 갖춰졌습니다.