Mover
- 기존의 Character Movement Component를 대체할 목적의 언리얼 공식 플러그인
- 포스트 작성일 기준으로 아직 Experimental
- Mover 1.0이 나오자마자 곧바로 CMC 지원을 끊을 계획은 없고 장기적으로 대체할 것이라 한다
- 언리얼 캐릭터의 기본적인 Movement가 마음에 들지 않아서 이를 대체할 Physics, Movement 플러그인 등을 찾다가 Mover 키워드를 알게 됐다
- 하지만 Mover는 내가 기대한 것과는 전혀 상관없는 목적으로 개발된 기능이다
- 동기화 시 캐릭터의 위치가 순간적으로 튀는 현상을 획기적으로 줄이기 위함
- 클라이언트는 서버보다 약간 먼저 예측적으로 실행
- 클라이언트에서 서버로 전송하는 데이터는 입력
작동 플로우

기존 CMC
- Automonous Client
- 클라이언트에서 로컬 입력으로 즉시 이동 반영 (Produce Input / Predict Move)
- 결과를 서버로 전송 (Inputs + Move Result)
- Authority
- 클라이언트로부터 입력고 예측결과 받아 비교 (Perform Move)
- 서버 시뮬레이션으로 일치 여부 확인 (Detect Errors)
- Replicate State에서 결과가 다르면 서버에서 결정한 상태 정보로 수정
- Peer Client / Proxy
- 서버에게 받은 정보로 클라이언트의 위치 및 상태 갱신 (Interpolate)
Mover
- Automonous Client
- CMC와 동일하게 입력 시 내 캐릭터는 Predict Move
- 서버로는 입력 정보만 전달 (Inputs Only)
- Authority
- 클라이언트에서 받은 입력 정보 버퍼에 저장 (Buffer Inputs)
- 입력 키 바탕으로 시뮬레이션 해서 캐릭터의 위치 결정 (Perform Move)
- 위치 및 상태 정보와 함께 입력 정보도 같이 클라이언트에 제공 (Peer Client 2 - State + Inputs)
- 단, 롤백 시뮬레이션 하지 않는 클라이언트에 한해서는 State 정보만 전달 (Peer Client 1 - State)
- 서버로부터 받은 입력 정보로 시뮬레이션 해 상태 및 위치 결정
- ‘내’가 조종하는 Autonomous Client는 State 정보를 받아 검사 (Detect Errors + Correction)
보정 과정에서의 차이
기존 CMC
- 서버와 클라이언트의 차이 감지
- 클라이언트의 상태를 서버의 상태로 즉시 변경
- 이 때 캐릭터의 위치가 튀는 이슈 잠재적으로 발생 가능
Mover
- 서버와 클라이언트와 차이 발생 감지
- 서버가 클라이언트와 차이가 발생한 시점을 찾기 위해 롤백
- 차이가 발생한 시점을 찾고 거기서부터 다시 시뮬레이션 시작
- 시뮬레이션 결과를 클라이언트에 전송
- 클라이언트도 Local Predicted로 움직이고 있었기 때문에 보다 작은 오차 기대
출처