온라인 게임
네트워크 통신을 통해 게임을 같이 즐길 수 있는 멀티와 온라인 방법이 있다.
멀티플레이어는 LAN(Local Area Network)망으로 같이 접속되어 있는 상대방과 통신하여 게임을 진행 할 수 있다.
온라인 게임은 원격에 있는 서버와 연결하여 실시간 게임을 즐길 수 있다.
게임에서 사용하는 전통적인 네트워크 구조 2개로 분류할 수 있다.
네트워크 구조
- P2P (Peer To Peer)
- 분산형 네트워크 구조로 거미줄처럼 연결되어 있는 망으로 통신한다.
- 플레이어가 많을 수록 통신하는 네트워크 비용이 증가한다.
- C/S (Client / Server)
- 중앙 집중식 서버이다.
- 중앙에 있는 서버가 플레이어끼리 통신할 수 있도록 한다.
온라인 게임에서의 클라이언트 / 서버
월드 시뮬레이션
- 클라이언트 서버의 공통점
- 두 개 모두 시뮬레이션으로 가상의 공간을 만들어낸다.
- 서버의 역할
- 서버는 데이터 검증 및 연산하는 역할을 한다.
- 서버는 승인 권한을 부여 받아 플레이어들에게 판정을 내릴 수 있다.
- 클라이언트의 역할
- 게임에서의 클라이언트는 렌더링으로 우선으로 작업한다.
- 연산과 프레임을 높여 화면을 자연스럽게 표현한다.
몬스터 Spawn 되는 가정
- 서버가 먼저 몬스터를 Spawn하는 작업을 한다.
- 서버와 접속한 여러 클라이언트는 패킷을 주고 받아 정보를 동기화한다.
- 클라이언트는 패킷을 분석해 몬스터 Spawn 된 것을 알게 된 후 화면에 몬스터를 표시한다.
- 클라이언트 사용자는 화면에 표시된 몬스터를 확인할 수 있다.
몬스터를 이동하는 경우
- 서버는 인공지능 이동과 관련된 함수를 실행한다.
- 서버에서 몬스터가 인공지능 연산으로 인해 이동한다.
- 몬스터 이동한 결과를 패킷을 통해 여러 클라이언트에게 전달하여 서로 동기화한다
- 클라이언트가 다시 패킷을 분석해 몬스터를 이동하는 모습을 보여준다.
몬스터 타격의 판정
- 플레이어가 몬스터에게 타격을 가한 경우
- RPG 게임인 경우 몬스터가 죽거나 살거나, 죽은 경우 아이템을 떨군다.
- 타격에 대한 판정을 클라이언트나 서버가 담당할 수 있다.
- 클라이언트가 판정을 담당한 경우
- 서버의 연산 부담을 줄일 수 있는 장점이 있다.
- 그러나 게임바이너리 조작, 메모리 변경, 패킷 변조한 경우 게임이 취약하게 된다.
- 서버가 판정을 담당한 경우
- 서버의 연산 부담이 늘어난다.
- 서버가 판정을 맡으면서 안전한 게임으로 진행할 수 있다.
Authority 승인 권한을 부여된 시스템
- 온라인 게임에서는 판정과 승인 권한을 서버에게 주어 안전한 게임으로 만들 수 있다.
- 전투 판정, 아이템 드랍, 몬스터 인공지능 로직은 서버가 시뮬레이션한다.
- 승인 권한이 없는 클라이언트는 코스메틱 로직으로 UI 와 이펙트와 애니메이션을 담당하여 연출한다.
- 클라이언트는 Authority 서버로부터 데이터를 받지 못한다면 진행을 못하거나 연결이 끊어질 것이다.
- Authority 서버는 언리얼 엔진 데디케이트 사용하거나 Boost의 Asio 구축한다.
온라인 게임의 핵심
- 접속한 모든 플레이어들이 가상 세계에 함께 플레이 하는 것이 목적이다.
- 그리고 최소한의 패킷으로 온라인 서버 네트워크 통신을 만들어야한다.
- 네트워크 호출이 많고 패킷 정보가 큰 경우 게임이 지연되거나 부하로 멈춰버릴 수 있다.