Post

2026-07-14 TIL (97일차)

2026-07-14 TIL (97일차)

문제 상황

언리얼 엔진 프로젝트에서 캐릭터 슬라이딩 기능을 구현하는 과정에서 다음과 같은 복합적인 문제가 발생했다.

  1. 애니메이션 전진 이슈: 외부(Mixamo) 애니메이션 사용 시, 캐릭터가 제자리에서 엎드리지 않고 루트 본 자체가 앞으로 튀어나가거나 공중에 뜨는 현상.
  2. 스케일 축소 이슈: 슬라이딩 애니메이션 재생 시 캐릭터 메쉬의 크기가 작아짐 (Scale 0.666 비율).
  3. 카메라 덜덜거림 (Jittering): 메쉬 파묻힘을 해결하기 위해 액터 자체의 Z축 높이를 올렸더니, 이동 시 카메라와 캡슐 컴포넌트가 심하게 덜덜거리는 현상 발생.

해결 과정 1: 시퀀서를 이용한 제자리 애니메이션 굽기

외부 애니메이션의 전진 데이터를 삭제하고 완벽한 제자리 애니메이션으로 수정했다.

  1. 원본 애니메이션을 레벨 시퀀스(Level Sequence) 에 올림.
  2. 트랙 우클릭 -> Bake To Control Rig -> FK Control Rig 생성.
  3. 캐릭터 골반(Hips) 뼈의 Transform -> Location 트랙 확인.
  4. 캐릭터가 전진하는 방향의 축(이번 케이스의 경우 Z축 및 불필요한 X축)을 Delete 키로 삭제. (위아래 높낮이를 담당하는 축만 남겨둠).
  5. 수정된 트랙을 우클릭하여 Bake Animation Sequence로 새로운 애니메이션(Anim_Slide_InPlace) 생성.

해결 과정 2: AnimGraph를 활용한 스케일 복구 및 위치 보정

슬라이딩 시 충돌 판정(Capsule Component)의 크기를 줄이지 않기로 결정했다. 대신, 시각적인 메쉬(Mesh)만 바닥으로 내리기 위해 애니메이션 블루프린트(ABP)를 수정했다.

  • 노드 추가: Slide 상태(State) 내부에 Transform (Modify) Bone 노드 추가 (대상 본: Hips).
  • Z축 오프셋 적용:
    • Translation -> Add to Existing (Component Space)
    • Z 값을 -40.0으로 설정하여 캡슐 변경 없이 캐릭터 몸체만 바닥으로 밀착시킴.
  • 스케일 축소 버그 해결: Mixamo 원본 애니메이션에 포함된 Scale 축소 데이터(0.66)를 무시하기 위해 설정 변경.
    • Scale -> Replace Existing (Component Space)
    • X, Y, Z 값을 모두 1.0으로 덮어씌워 강제로 정상 크기 유지.

해결 과정 3: Tick 보간과 중력 충돌에 의한 Jittering 해결

가장 큰 문제였던 ‘카메라 덜덜거림’은 C++ 코드의 Tick 로직과 물리 엔진(Movement Component) 간의 Z축 주도권 충돌이 원인이었다.

원인 분석

서버의 Tick 함수 내부 VInterpTo 로직에서 액터의 X, Y, Z 모든 축을 보간하여 강제로 위치를 세팅하고 있었다[cite: 2]. 캐릭터를 강제로 위로 올린 상태에서 이 로직이 돌게 되면:

  1. CharacterMovement는 공중(Falling)으로 판단하여 매 프레임 중력(아래)을 적용.
  2. TickSetActorLocation은 고정된 Z 목표값을 향해 위로 액터를 끌어올림[cite: 2].
  3. 두 시스템이 매 프레임 충돌하며 캡슐이 위아래로 진동하고, 캡슐에 붙은 SpringArm과 카메라가 심하게 떨리게 됨[cite: 2].
This post is licensed under CC BY 4.0 by the author.