Post

2026-07-16 TIL (99일차)

2026-07-16 TIL (99일차)

TIL - Unreal Engine 5: 캐릭터 사망 애니메이션 최적화 및 시퀀서 수정

목표

기존 프로토타입에서는 캐릭터 HP가 0이 되어 사망할 때, 즉시 게임 오버 연출(RunnerDeathSequence: 철창 닫힘, UI 출력)로 넘어가며 캐릭터 메쉬가 숨김(Hidden) 처리되었다. 이로 인해 캐릭터가 쓰러지는 사망 애니메이션을 유저가 볼 수 없는 문제가 있었다.

이를 해결하기 위해 사망 시 즉각적인 시퀀스 호출을 막고, 사망 몽타주(Montage) 재생 -> 타이머(Delay) 대기 -> 데스 시퀀스 실행 순서로 흐름을 제어하는 C++ 로직을 구현했다.

  • 캐릭터 사망 시 이동 로직 강제 중단 처리
  • 사망 애니메이션의 스케일 및 위치 데이터(공중부양) 버그 수정
  • 레벨 시퀀서(Sequencer)를 활용한 애니메이션 베이킹(Baking)

주요 내용

1. 캐릭터 이동 제어 (Movement Control)

  • 문제: 사망 시 캐릭터가 물리적/로직적으로 멈추지 않고 애니메이션만 재생되거나, Idle 상태로 돌아가버리는 현상.
  • 해결: HandlePlayerDeath() 함수 내에서 SetMoveMode(ERunnerMoveMode::Stop)을 호출하여 캐릭터의 Tick 기반 이동 로직을 강제로 차단함.
  • 팁: 단순히 몽타주 재생만으로는 상태를 유지하기 어려울 수 있으므로, 사망 상태는 AnimGraph의 State Machine 내 Death 상태에서 관리하는 것이 안정적임.

2. 애니메이션 3D 데이터 수정 (Sequencer)

  • 스케일 버그 (Scale): 믹사모(Mixamo) 등 외부 에셋 사용 시 스케일이 0.66 등으로 축소되는 현상 해결.
    • 시퀀서에서 해당 본(Hips)의 Scale 키프레임을 제거하거나 1.0으로 고정함.
  • 공중부양 및 슬라이딩 버그 (Location):
    • 앞으로 나가는 현상: Location.X, Location.Y 트랙의 데이터를 삭제하고 0.0으로 고정하여 “In-Place(제자리)” 애니메이션으로 변경.
    • 공중에 뜨는 현상: Location.Z 트랙은 삭제하지 않고(바닥 안착을 위해 필요), 키프레임 전체를 드래그하여 바닥 높이에 맞게 오프셋을 조절함.

3. 애니메이션 구워내기 (Bake)

  • 수정된 시퀀서 데이터를 실제 애니메이션 파일로 저장하는 과정.
  • 방법:
    1. 시퀀서 트랙에서 Skeletal Mesh 우클릭.
    2. Bake Animation Sequence 실행.
    3. 원하는 경로에 .uasset으로 저장.

작업 시 유의사항

  • 키프레임 관리: 값을 변경한 후에는 반드시 해당 값 옆의 + 아이콘(키프레임 추가)을 눌러 값을 확정해야 함.
  • 삭제 vs 고정: 특정 축을 무조건 삭제하는 것이 아니라, 캐릭터의 이동 원리(X/Y축 이동, Z축 높이)에 따라 살려둘 트랙과 삭제할 트랙을 구분해야 함.
  • 상태 머신: 일회성 연출인 몽타주와 달리, 사망과 같은 ‘지속적 상태’는 상태 머신(State Machine) 처리가 가장 깔끔함.

🔗 참고 자료

  • Unreal Engine 5 Documentation - Sequencer
  • Character Animation State Machine Logic
This post is licensed under CC BY 4.0 by the author.