Multiplayer Games Network model

Unreal 이론|2024. 11. 24. 17:29

Single Games

  • 싱글 게임은 단일 컴퓨터에서 단일 게임 세션으로 구성됨
  • 네트워크를 통해 다른 컴퓨터에서 실행되는 게임의 다른 인스턴스로 정보를 전송할 필요 없음

Multiplayer Games

  • 두개 이상의 인스턴스가 서로 다른 컴퓨터에서 실행되는 형태
  • 서로 다른 인스턴스에서의 변경사항 (ex: 캐릭터 입력)은 게임의 다른 인스턴스로 전송되야함
  • 그러한 정보를 어떻게 옮기는가? 
    • Peer to Peer
      • 정보 전송의 가장 간단한 방법
      • 변경사항이 다른 플레이어의 캐릭터로 "직접" 전송된다
      • 플레이어가 많아질수록 많은 양의 데이터가 네트워크를 통해 전송되야 하므로 부하 증가
      • Authoritative 버전의 게임이 없다 -> 로컬 게임의 정보가 변경될 때 마다 인스턴스가 변경되므로 어떤 플레이어의 게임 인스턴스가 올바른가? -> 어떤것도 올바른 버전의 게임이 아님 -> 클라이언트 변조 문제로도 연결 가능
    • Client-Server model
      • 단일 시스템이 서버로 지정되고, 다른 모든 시스템은 클라이언트로 지정
      • 모든 클라이언트는 서버하고만 연결되어 통신하며, 다른 클라이언트에게 정보를 전송하지 않는다.
      • 서버와 정보를 송수신하기 위한 대역폭 요구사항만 충족하면 된다
      • 서버가 올바른 버전으로 정립된 게임 버전을 실행한다는게 핵심
      • 각 클라이언트가 서버에 요청을 보낼 때 마다(ex: 캐릭터를 움직이는 요청) 서버는 적절한 요청인지 확인
      • 서버가 적절한 요청인지 확인 후 다른 클라이언트들에게 정보를 전달 -> 이 과정을 복제(replication)라고 함

클라이언트-서버 모델의 종류

  •  Listen Server
    • 한명의 플레이어가 서버를 맡고, 나머지 플레이어가 클라이언트
    • 서버를 맡은 플레이어가 게임을 플레이하며 그래픽을 렌더링함
    • 서버를 맡은 플레이어가 응답속도에서 좀 더 유리함
  • Dedicated Server
    • 게임을 플레이 하지 않는 서버컴퓨터 존재
    • 그래픽을 서버컴퓨터가 렌더링하진 않는다
    • 서버가 Authoritative 버전 게임의 시뮬레이션만 담당하며 클라이언트들에게 데이터를 복제해 전송한다
    • 특히 대규모 MMO나 많은 유저가 빠른 응답속도를 필요로 하는 게임에 적합

What Unreal Engine uses?

  • Authoritative Client-Server model
  • 한 컴퓨터는 항상 서버, 다른컴퓨터는 클라이언트로 서버에 연결된다.
  • 서버 버전만이 항상 Authoritative 버전
  • 싱글 플레이어 게임도 클라이언트-서버 모델(클라이언트와 서버가 같은 컴퓨터)

Testing Multiplayer - Lan & PIE

  • 멀티플레이 테스트 -> PIE의 Multiplayer Options 확인
    • Play As Listen Server -> 에디터 인스턴스가 Server와 Client 권한을 동시에 가짐. 다른 인스턴스는 Client로 에디터 인스턴스에 연결된것.
    • Standalone이나 Listen Server는 쉽게 생각할 수 있지만, Play as Client는 좀 다르다
    • 백그라운드에 Dedicated Server가 올라가고, 서로 다른 클라이언트가 설정한 수 만큼 인스턴스로 생성되어 윈도우에 표시된다.
    • 3rd person 템플릿에 배치된 기본 캐릭터에 possess 되지 않고, 클라이언트 수만큼 캐릭터가 스폰된다.

Setting up LAN Connection

  • 하나의 라우터에 여러 플레이어가 붙어서 플레이하는 게임 형태
  • 각각의 플레이어는 고유한 local IP 주소를 가지고 있다.
  • 동일한 네트워크 환경에 Local IP로 접속하는것

Open Level(), ClientTravel()

  • Open Level 함수도 그냥 썻었는데, 짚고 넘어갈 부분이 있는것 같다.
  • 첫번째 파라미터가 월드 컨텍스트 오브젝트. 간단하게 this 라는 키워드를 사용했는데, 월드에 존재하여 해당 월드의 컨텍스트를 전달할 수 있는 오브젝트이다.
  • ClientTravel은 APlayerController 클래스의 함수.
  • GetGameInstance()->Get***PlayerController() 함수를 통해 PlayerController를 가져와 ClientTravel을 호출

'Unreal 이론' 카테고리의 다른 글

Online Subsystem  (0) 2024.11.25
게임의 완성  (0) 2024.11.23
게임 플로우 다듬기  (1) 2024.11.21
헤드업디스플레이의 구현  (0) 2024.11.14
인공지능 - 행동트리 모델의 구현  (0) 2024.11.11

댓글()