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