본문으로 바로가기

멀티 플레이 게임 개요

멀티플레이 게임이란, 여러 유저가 각자 다른 인스턴스에서 실행되지만, 네트워크를 통해 게임의 상태를 공유하는 방식

네트워크 모델

Peer-to-Peer (P2P)

모든 유저 인스턴스가 서로 대등하게 연결되어 있으며, 각 인스턴스가 다른 모든 인스턴스와 직접 통신하는 모델

  • 플레이어수에 따른 네트워크 연결 수가 O(n^2) 으로 커짐.
  • 판정 권한을 가진 기준 인스턴스가 없음.

Client–Server

하나의 서버 인스턴스에 모든 클라이언트가 연결되며, 서버 인스턴스는 모든 인스턴스의 상태 기준이 되는 권한을 가지며 클라이언트의 상태 변경 요청의 유효성을 판정하는 모델

Client–Server 상세

구조

하나의 Server에 하나 이상의 Client가 연결되는 구조.

  • Server
    • 게임 호스트로써 유일하고 정확한 게임 상태를 유지 역할
    • 실제 게임이 진행되는 곳
    • 게임 상태를 각 Client에게 Actor의 위치, 상태 동작 방식 등의 정보를 전달. (Replication)
  •  Client
    • 서버에 있는 자신의 원격 Pawn을 조정 역할
    •  서버로 부터 Actor들의 상태를 받아 서버의 게임 상태를 시뮬레이션 및 렌더링.

 

기본 동작 흐름

클라이언트는 상태 변경을 요청하고 서버는 요청을 판단 뒤 모든 클라이언트를 갱신.

[클라이언트 A] 상태 변경 요청
	↓ 
[서버] 상태 변경 판정
	↓
[서버] 모든 클라이언트에 클라이언트 A의 상태 변경 전송 (Replication)
	↓ 
[모든 클라이언트] 클라이언 A 상태 변경 반영
  • 상태 변경 요청: 중요한 상태변경 사항은 클라이언트가 처리하지 않고 서버에 요청
  • 상태 변경 판정: 서버는 요청 받은 상태 변경의 판단 및 서버에 적용
  • 상태 변경 전송(Replication): 서버는 변경된 상태와 관련있는 클라이언트에 변경 사항 전송 (서버의 상태를 클라이언트에 복제 Replication)
  • 상태 변경 반영: 모든 클라이언트는 서버의 Replication을 받아서 월드 상태 업데이트

서버 유형

Listen Server

플레이어 인스턴스 중 하나가 서버 역할을 함께 하는 방식

  • 성능 부하: 서버 인스턴스는 렌더링 기능도 필요.
  • 공정성 이슈: 호스트는 네트워크 지연 없음 이점이 발생. (호스트는 Replication이 필요 없음)
  • 적은 비용: 별도 서버 구성 필요 없음.
  • 소규모, 비 경쟁적 게임에 적합

Dedicated Server

서버 구동만을 위한 인스턴스를 사용하는 방식

  • 높은 비용: 서버만을 위한 별도의 인스턴스가 필요.
  • 서버 전용 로직: 서버는 플레이를 하지 않기 때문에 렌더링 불필요.
  • 공정성: 모든 클라이언트는 동등한 네트워크 지연이 발생
  • 대규모, 경쟁에 민감한 게임에 적합.

언리얼 엔진이 사용하는 서버 모델

  • Client Server 모델을 사용. (P2P는 지원하지 않음.)
  • Dedicated server와 Listen server 방식 지원.