Mover

mingu Lee·2026년 1월 23일

Unreal Engine 5

목록 보기
9/9
post-thumbnail

Mover란?


Mover는 Network Prediction Plugin 또는 Chaos Networked Physics 시스템을 사용하는 롤백 네트워킹을 통해 모듈형 액터 무브먼트를 지원하는 Unreal Engine Plugin이다.

네트워크 전문 지식 없이도 네트워크 친화적인 이동을 만들 수 있다고 소개되어 있다.

핵심 개념

  • 탈 캐릭터 중심:
    • CMC는 ACharacter 클래스에 종속적
    • Mover는 일반 AActor 어디든 붙여서 사용할 수 있음
  • 네트워크 예측 내장:
    • 복잡한 Rollback 및 Resimulation 로직이 플러그인 수준에서 처리됨
    • 지연 시간이 있는 환경에서도 클라이언트와 서버 간의 이동 차이를 획기적으로 줄여줌
  • Experimental:
    • UE 5.4 버전부터 본격적으로 소개되었으며, 현재는 CMC를 완전히 대체하기 전 단계의 실험 기능으로 제공 중
    • 궁극적으로는 CMC 시스템을 대체할 예정

Mover의 핵심 구성 요소


1. Mover Component

Mover Component는 무브먼트를 관리하는 액터 컴포넌트로, 현재 액터의 상태(위치, 속도)를 보유하고 이동에 영향을 미치는 API를 제공한다.

2. Movement Mode

Movement Mode는 이동 방식을 결정하는 독립적인 Object이다.

각 모드는 서로 분리되어 있어, 새로운 이동 방식을 추가할 때 기존 코드를 건드리지 않고 새 모드만 구현하면 된다.

3. Layered Moves

기본 이동 모드 위에 추가적인 힘을 얹는 개념이다.

피격 시 뒤로 밀려나는 넉백, 특정 지점으로 빨려 들어가는 유도력, 애니메이션의 루트 모션 등을 Layered Move로 구현하여 이동을 시킬 수 있다.

여러 개의 Layered Move를 동시에 섞어서 적용할 수 있다는 것이 큰 장점이다.

4. Transition

한 이동 모드에서 다른 모드로 언제 바뀔지를 결정하는 로직이다.

예를 들어, 중에 떠 있다면 Fall 모드로 전환하라라는 조건을 독립적인 Transition Object로 관리하여 코드의 복잡도를 낮출 수 있다.

CMC와 Mover의 차이


Unreal 공식 문서를 보면 다음과 같은 차이점이 있다고 한다.

CMC 작동 Flow


1. Autonomous Client

  • Produce Input: 사용자의 입력을 생성
  • Predict Move: 서버의 응답을 기다리지 않고, 입력값을 바탕으로 예측하여 이동 (로컬에서의 즉각적인 반응성 확보)
  • Inputs + Move Result 전송: 서버로 '입력한 값과 해당 입력으로 인해 이동한 위치'값을 전송
  • Re-sim: 나중에 서버로부터 받은 실제 위치와 내가 예측했던 위치가 다를 경우, 서버 값으로 보정

2. Server

  • Perform Move & Detect Errors: 클라이언트의 입력을 직접 실행해본 뒤, 클라이언트가 보고한 위치와 서버가 계산한 위치를 비교하여 서버가 직접 오류를 찾아냄
  • Ack or Correction: 위치가 맞으면 승인(Ack), 틀리면 보정값(Correction)을 보냄

3. Peer Clients / Simulated Proxy

  • Interpolate: 서버가 보내주는 최종 상태(State)만 받아서 보간

Mover 작동 Flow


1. Autonomous Client

  • Produce Input: 사용자의 입력을 생성
  • Predict Move: 서버의 응답을 기다리지 않고, 입력값을 바탕으로 예측하여 이동 (로컬에서의 즉각적인 반응성 확보)
  • Detect Errors & Re-sim: 나중에 서버로부터 받은 실제 상태와 내가 예측했던 상태가 다를 경우, 오류를 감지하고 Re-sim

2. Server

  • Buffer Inputs: 클라이언트로부터 전달받은 입력값들을 순서대로 쌓아둠
  • Perform Move: 서버의 시뮬레이션 틱에 맞춰 저장된 입력값을 실행
  • Replicate State: 계산된 최종 상태(위치, 속도 등)를 다시 모든 클라이언트에게 전송

3. Peer Clients / Simulated Proxy

  • Interpolate (Peer Client 1): 서버로부터 받은 상태 값을 바탕으로 캐릭터를 부드럽게 보간
  • Predict ahead (Peer Client N): 네트워크 상황에 따라 서버 상태뿐만 아니라 전달받은 입력값을 활용해 다른 플레이어의 움직임을 미리 예측하여 더 매끄럽게 표현하기도 함

요약

  1. 클라이언트는 "난 이렇게 움직일 거야"라고 예측하고 입력을 서버로 보냄
  2. 서버는 해당 입력을 받아 실제로 움직여보고 결과를 모두에게 알림
  3. 클라이언트는 서버 결과와 내 예측이 다르면 수정하고, 다른 사람들은 서버 결과를 바탕으로 내 움직임을 처리

두 시스템의 흐름상 결정적 차이


핵심 차이 1: 무엇을 보고하는가?

  • CMC: "입력 + 결과"를 모두 보고하며, 서버는 이 결과를 검증하느라 바쁨
  • Mover: 순수 입력(Inputs Only)만 보내며, 서버는 결과 검증 대신 자기 할 일(시뮬레이션)만 하고 상태를 뿌려줌

핵심 차이 2: 누가 틀린 걸 찾아내는가? (가장 큰 변화)

  • CMC: 서버가 오류를 감지(Detect Errors)해서 클라이언트에게 알려줌
  • Mover: 클라이언트가 서버의 상태값을 받아보고, 자기 예측과 대조하여 스스로 오류를 감지함
    (서버의 연산 부담이 줄어듦)

핵심 차이 3: 다른 사람(Peer)에게 어떻게 보이는가?

  • CMC: 다른 유저는 그저 서버가 시키는 대로 위치만 따라감
  • Mover: 다른 유저에게 상태 + 입력값(State + Inputs)을 같이 보내는 덕분에 다른 유저의 화면에서도 내 캐릭터가 다음에 어디로 갈지 미리 예측해서 그려줄 수 있어 훨씬 부드러움
profile
Github: https://github.com/dlalsrn

0개의 댓글