[UE5] 언리얼 엔진 Server-Client 구조와 실행 모드

eomcri·2025년 3월 19일

Server-Client 모델

Unreal 엔진은 멀티플레이어 게임에서 Server-Client구조를 사용한다.
Server가 정의한 인스턴스가 게임의 상태에 대한 Authority를 가지며, 다른 모든 인스턴스는 Server로부터 업데이트를 받는 Client 이다.

실행 모드

실행 모드정의특징
Standalone네트워킹을 고려하지 않는 단일 인스턴스- 싱글 플레이어(Local 세션)
- 어떤 것도 다른 곳에 Replicate 하지 않음
- 모든 Gameplay 클래스가 하나의 프로세스에서 실행
Dedicated ServerServer 전용 인스턴스- Local 플레이어 없음
- 렌더링 하지 않음. GPU 없이 구동 가능
- 게임 로직과 네트워크 통신만 처리
- 원격 머신이나 클라우드에 배포
Listen Server한 플레이어가 동시에 Server 호스트 역할- Server이자 Client 역할 수행
- 호스트에게 UI와 PlayerController 존재
- 호스트가 게임을 나가면 Server도 종료
- P2P 스타일 게임에 많이 사용
Client호스트가 아닌 모든 플레이어- Server로부터 데이터를 받아 표시
- 자신의 입력을 Server에 전송
- 자율적(autonomous) 플레이어 컨트롤러 보유
- 권한 있는 결정과 게임 상태 업데이트는 Server에 의존

Gameplay Framework

Unreal Engine의 Gameplay Framework는 다양한 클래스로 구성되며, 이들은 Server와 Client에서 서로 다른 역할을 수행한다.

클래스존재 위치역할
GameModeServer게임 규칙 제어
GameStateServer와 모든 Client게임의 전체적인 정보(e.g. 점수, 시간) 동기화
PlayerControllerServer와 자신을 소유한 Client각 플레이어의 입력은 자기 Client와 Server에만 알 수 있음
PawnServer와 모든 Client모든 플레이어가 자신 외의 Pawn도 볼 수 있도록 Server에 Replicate

Server-Client 상호작용

이러한 역할 분담을 통해 Server가 Gameplay에 관련된 결정에 독점적인 권한을 갖고, Client는 그에 따른 결과를 표시하며 입력을 Server에 보내는 구조가 명확해집니다.

예제: Client에서 Pawn 이동

  1. Client에서 입력을 감지하면, 즉시 Pawn의 움직임을 예측하여 반영 → 실시간성 확보
  2. 동시에 이동 요청을 Server로 전송
  3. Server는 요청을 검토 후, 권한 있는 위치에서 캐릭터를 실제로 이동
  4. 새로운 위치 및 상태를 모든 Client에게 Broadcast (자신도 포함)
  5. Client의 자체적인 예측이 정확했다면 수정할 것이 없고 부드럽게 플레이됨
  6. 예측이 틀렸다면, Server의 업데이트에 따라 캐릭터 위치가 조정됨

핵심: 항상 Server의 상태가 최종적으로 신뢰하는 값이다.

profile
게임 개발자가 꿈인 게이머

0개의 댓글