Post

언리얼 엔진의 클라이언트 입장에서 애니메이션이 2배속으로 재생되는 문제

언리얼 엔진의 클라이언트 입장에서 애니메이션이 2배속으로 재생되는 문제

이 글은 제 개인적인 공부를 위해 작성한 글입니다.
틀린 내용이 있을 수 있고, 피드백은 환영합니다.


문제


리슨 서버 환경의 게임을 만들고 있는데, 클라이언트 입장에서 애니메이션이 2배속으로 재생되는 문제가 있었다.

모든 애니메이션이 2배속은 아니였고 애니메이션 블루프린트 내의 상태 머신에서 재생하는 걷기/달리기 애니메이션에서만 그러하였고, 몽타주로 재생하는 공격 애니메이션은 문제가 없었다.

처음에는 달리기 처리하는 코드에서 문제인가 싶어서 확인해 봤는데 문제는 없었고, 상태 머신 내에서 어딘가에서 재생 속도를 두배속으로 처리해 주나 싶었는데도 아무 문제가 없어 한 6시간은 날렸다….


원인


애니메이션 블루프린트의 루트 모션 설정 값이 “Root Motion from Everything”으로 되어 있었는데, 이 설정이 클라이언트 입장에서 애니메이션이 2배속으로 재생되는 원인이었다.

언리얼 엔진에서 루트 모션은 애니메이션 데이터 자체가 캐릭터의 움직임을 제어하는 기술인데, 이 루트 모션 설정이 “Root Motion from Everything”으로 되어 있으면, 애니메이션 블루프린트 내의 모든 애니메이션(블렌드 스페이스, 애니메이션 시퀀스 등)에서 루트 모션을 적용하게 된다.

이 모드는 기본적으로 네트워크 환경을 고려하지 않기에, 클라이언트는 자체적으로 애니메이션의 루트 모션을 계산하여 캐릭터를 움직이려고 하지만, 동시에 서버로부터 캐릭터 위치에 대한 복제된 값도 받는다.

그렇기에 불일치가 발생해 애니메이션이 2배속으로 재생되는 현상이 발생한 것이라고 생각한다.


해결 방법


img

애니메이션 블루프린트의 루트 모션 설정 값을 “Root Motion From Montages Only”로 변경해 주니 문제가 해결되었다.

이 설정은 애니메이션 블루프린트 내의 몽타주에서만 루트 모션을 적용하게 하여, 상태 머신에서 재생하는 걷기/달리기 애니메이션에는 루트 모션이 적용되지 않도록 한다.

추가로 언리얼 루트 모션 공식 문서의 5.1 버전 이하에서는 네트워크 관련해서 내용이 적혀있는데, 그 이후부터는 내용이 변경되어 네트워크 관련 내용이 사라진 것 같다.

막상 몇 시간을 헤맸는데 설정 하나로 해결되니 허무하다!


참고

This post is licensed under CC BY 4.0 by the author.