모션 매칭 사용 중 텔레포트 회전이 즉시 반영되지 않고 턴 동작처럼 처리되는 문제

안녕하세요

캐릭터를 특정 위치와 회전값으로 텔레포트시킬 때, 모션 매칭 시스템이 즉각적으로 지정한 로테이션으로 회전하지 않고, Turn 애니메이션을 재생하며 회전하는 현상이 발생합니다.

모션매칭 노드를 사용하지 않으면 의도한대로 즉각적으로 회전하는것을 확인 하였습니다.

어떤 식으로 해결해야 하는지 궁금합니다.​

재현 방법
GAS 프로젝트에서도 동일하게 발생하였습니다.

안녕하세요.

Unreal Engine 5.6 버전의 GAS 프로젝트에서 해당 노드를 활용하여 테스트를 진행한 결과, 질문주신 현상을 재현하기에는 어려움이 있었습니다.

기본 GAS 프로젝트에서 Turn In Place 애니메이션이 재생되기 위해선 이전 프레임이 Moving이고 현재 프레임이 Idle인 경우에만 조건이 충족되도록 설정되어 있기 때문에,

일반적인 텔레포트 상황에서는 해당 조건이 만족되지 않아 애니메이션이 재생되지 않는 것으로 보입니다.

다만, 질문주신 상황이 이동 중 캐릭터가 멈추는 타이밍(Last Frame - Moving, Current - Idle)에 정확히 텔레포트가 발생한 경우라면, Turn In Place 조건이 충족될 가능성도 있을 것으로 생각됩니다.

이러한 경우에는 텔레포트 직후 OffsetRootRotationMode를 Release로 전환해주는 방식으로 방향 동기화 문제를 해결할 수 있을 것으로 보입니다.

혹시 현재 테스트하신 상황이 위 조건과 조금 다르거나, 보다 구체적인 상황이 있다면 공유해주시면 추가로 정확한 원인 파악 및 해결 방안을 제시드리는데 큰 도움이 될 것 같습니다.

감사합니다.

제가 질문을 오해의 소지가 있게 한거 같습니다.

우선 지금 의도하는바는 텔레포트로 특정 방향을 지정했을때 그 방향으로 캐릭터가 즉각적으로 회전하길 원합니다.

허나 모션 매칭을 적용하면 액터의 로테이션 값은 변하는데 실제 캐릭터 메시는 회전하지 않고 있습니다.

해당 영상을 보시면 애님 bp에서 모션매칭 노드로 연결이 되면 액터의 로테이션을 돌려줘도 실제 방향이 바뀌지 않는것 때문에 질문을 드렸습니다

노드들을 테스트 해보니 Get_OffsetRootRotationMode 함수에서 DefaultSlot일 때만 Release로 해서 회전을 안하고 있는데 여기에 bool 을 추가 해서 하면 될지 아니면 다른 더 올바른 방식이 있는지 알려주시면 감사하겠습니다.

GameAnimationSample_5_6 - 언리얼 에디터 2026-02-10 19-42-35.mp4(80.2 MB)

안녕하세요.

첨부해주신 영상을 확인해 보았을 때, 메시 컴포넌트의 Rotation 값은 텔레포트로 변경되지만, 실제 캐릭터 메시가 월드에서 즉시 회전하지 않는 현상이 핵심으로 보입니다.

모션 매칭에서는 보통 캡슐 기반 이동을 유지하면서도 루트모션처럼 자연스럽게 보이도록 OffsetRootBone 노드를 사용합니다.

이때 OffsetRootBoneRotationMode가 Accumulate 모드로 동작하면, 메시 컴포넌트의 움직임을 루트 오프셋에 누적하는 방식이라,

텔레포트와 같이 Rotation이 크게 바뀌는 순간에도 그 변화가 오프셋에 반영되면서 월드 기준 메시 방향이 이전 방향을 유지하게 됩니다.

반대로 Release 모드는 누적된 오프셋을 풀어주는 방향으로 동작하기 때문에, 텔레포트 직후에는 원하시는 방향 회전이 더 즉각적으로 반영되는 결과를 얻을 수 있습니다.

따라서 말씀해주신 것처럼, 텔레포트 직후에 bool 값을 통해 OffsetRootRotationMode를 잠깐 Release로 전환했다가 다시 Accumulate로 원복하는 방식은 충분히 타당한 접근으로 보입니다.

추가적으로 첨부해주신 영상에서는 Strafe 모드로 테스트 하신 것으로 보입니다.

위의 Accumulate 상쇄 이슈가 근본 원인이라면,

Strafe/Aim 모드에서는 여기에 더해 UseDesiredRotation 값 설정으로 인해 회전이 ActorRotation이 아니라 Controller의 Yaw를 따라가도록 설정되어있기 때문에, 텔레포트로 액터 회전을 바꿔도 기대한 방향 전환이 적용이 되지 않습니다.

또한 GameAnimationSample은 Tick마다 Aim/Strafe 상태를 판단해 CharacterMovementComponent 회전 관련 옵션을 매 프레임 설정하는 구조이기 때문에,

텔레포트 직전에 옵션을 잠깐 바꾸더라도 다음 Tick에서 샘플 로직이 다시 덮어써버리게 됩니다.

Strafe 모드에서도 텔레포트 방향을 즉시 맞추고 싶으시다면, 아래 두 가지를 함께 고려해 보실 수 있습니다.

  1. 텔레포트 직후 짧은 구간(예: 1~2 프레임) 동안 샘플의 Tick 세팅을 우회하는 bool값을 추가
  2. 그 구간에서만 아래의 옵션을 적용 후 원상복구

UseDesiredRotation = false

bOrientRotationToMovement = true

감사합니다.