본문으로 건너뛰기
Unreal Engine 멀티플레이LESSON 21

CharacterMovementComponent와 캐릭터 이동 복제

난이도입문 → 초급
예상 시간80분
선수지식20강의 연결별 복제 조건

21강. CharacterMovementComponent와 캐릭터 이동 복제

1. 이번 강의에서 해결할 문제​

캐릭터 위치를 매 Tick Server RPC와 Multicast로 보내니 떨림·순간 이동과 트래픽이 늘어납니다. ACharacter와 UCharacterMovementComponent는 소유 클라이언트 입력 예측, 서버 이동 검증과 Simulated Proxy 보간을 이미 제공하므로 기본 경로를 이해하기 전에 Transform 복제를 덧붙이면 두 시스템이 충돌합니다.

2. 학습 목표​

3. 핵심 개념​

소유 클라이언트는 입력을 즉시 적용해 체감 지연을 줄이고 압축된 이동 데이터를 서버로 보냅니다. 서버는 권위 있는 CharacterMovement로 이동을 재현·검사하고 결과가 다르면 클라이언트를 보정합니다. 다른 클라이언트의 Simulated Proxy는 서버가 보낸 이동 스냅샷 사이를 보간합니다.

Owning Client: Input → local prediction → saved moves
Server: receive moves → simulate/validate → authoritative transform
Owner: acknowledge or correction
Other Clients: replicated movement → smoothing/interpolation

4. 단계별 실습​

CaptureArenaCharacter.cpp
ACaptureArenaCharacter::ACaptureArenaCharacter()
{
bReplicates = true;
SetReplicateMovement(true);

bUseControllerRotationYaw = false;
UCharacterMovementComponent* Move = GetCharacterMovement();
Move->bOrientRotationToMovement = true;
Move->RotationRate = FRotator(0.0f, 540.0f, 0.0f);
Move->MaxWalkSpeed = 600.0f;
}

void ACaptureArenaCharacter::Move(const FInputActionValue& Value)
{
if (!Controller || !IsLocallyControlled()) return;

const FVector2D Axis = Value.Get<FVector2D>();
const FRotator YawRotation(0.0f, Controller->GetControlRotation().Yaw, 0.0f);
const FVector Forward = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
const FVector Right = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);

AddMovementInput(Forward, Axis.Y);
AddMovementInput(Right, Axis.X);
}

수동으로 SetActorLocation을 매 프레임 Server RPC에 보내는 코드를 제거합니다. PIE 콘솔에서 네트워크 열화와 보정 표시를 사용합니다. 명령 이름과 지원 여부는 엔진 버전에 따라 확인합니다.

Net PktLag=150
Net PktLoss=5
p.NetShowCorrections 1

리슨 호스트, 원격 소유 클라이언트, 관전자 역할의 다른 클라이언트에서 이동 경로를 비교합니다. 서버와 클라이언트 Collision, MaxWalkSpeed와 이동 Mode가 다르면 반복 보정이 발생하는지 확인합니다.

5. 코드가 동작하는 이유​

AddMovementInput은 CharacterMovement의 네트워크 예측 경로에 들어갑니다. 소유 클라이언트가 즉시 움직여도 서버가 최종 Transform을 결정하고 불일치 시 고칩니다. Simulated Proxy는 입력을 실행하지 않고 서버 이동을 표현하므로 로컬 입력 분기를 유지합니다.

스프린트·대시처럼 이동 시뮬레이션 자체를 바꾸는 기능은 단순 bool RPC만으로 완벽한 예측이 되지 않을 수 있습니다. 커스텀 SavedMove와 Network Prediction은 심화 주제이며 이 과정에서는 서버 상태와 보정 증상을 먼저 이해합니다.

6. 자주 하는 실수와 해결법​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

CharacterMovementComponent와 캐릭터 이동 복제 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“CharacterMovementComponent와 캐릭터 이동 복제”에서 오류나 데이터 손실을 줄이는 선택은 무엇인가요?
  2. 문제 2‘클라이언트와 서버의 Collision/속도 설정 불일치’ 실수를 판단할 때 “CharacterMovementComponent와 캐릭터 이동 복제” 강의가 제시한 기준은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

21강. CharacterMovementComponent와 캐릭터 이동 복제 미완료 상태