본문 바로가기

프로젝트/멀티 게임 서버 프로젝트

[P2P 멀티 게임을 만들어보자-1] 만들게 된 배경과 간단하게 기획

반응형

 

만들게 된 배경은?

먼저 게임을 개발하려는 배경에 대해 설명을 하려고 합니다.

이전에 간단하게 게임을 만들어 보았지만 싱글 게임이었고, 멀티 게임도 한번 만들어보고 싶었습니다.

그렇기에 멀티 게임을 위한 학습 목적에 가까운 게임을 만들어 보려고 합니다.


간단하게 기획을 해보자!

※ 클라이언트

게임 유형 : 2D / PvP / 서바이벌

언어/엔진 : C# / Unity

통신 방식 : P2P, UDP

필요 리소스 : 캐릭터, 타일맵, 집 건물 및 내부, 아이템 (무기/음식), bgm 및 효과음

구현 기능

기능 상세 설명
캐릭터 조작/이동 (x, y) 캐릭터를 상하좌우로 조작할 수 있다.
실시간 통신 사용자가 서버를 열어 다른 사용자와 실시간 통신을 할 수 있다.
사용자 간 공격 (PvP) 다른 사용자를 공격하여 체력을 닳게할 수 있다.
아이템 수집 맵에 있는 아이템을 인벤토리로 가져올 수 있다.
사용자 간 채팅 사용자 간 실시간 채팅을 할 수 있다.
사용자 별 개인 공간 본인만 들어갈 수 있는 리스폰 공간을 제공한다.

 

 

서버

방식 : HTTP 웹 서버

언어/프레임워크 : Java / Spring

구현 기능

기능 상세 설명
P2P 서버 관리 사용자가 만든 서버를 저장하여 목록으로 보여준다.
사용자 접속 관리 접속 중인 사용자 정보를 관리한다.

 


해당 방식으로 결정한 이유

P2P 방식

 

P2P는 모든 노드(사용자)가 서버이며 클라이언트가 될 수 있는 방식입니다. 그 반대로는 중앙 서버가 있고 나머지 노드는 클라이언트가 되는 방식입니다. 그리고 제가 개발할 방식은 중앙 서버가 필수적인 정보만 관리하고, 일부 사용자가 서버가 될 수 있는 그림과 같은 구조가 될 것입니다.

 

해당 게임은 여러 개의 서버가 만들어지는 형식입니다. 하지만 서버가 많을 경우 중앙 서버에서 모든 방의 요청을 관리한다면 서버에 부하가 많이 발생할 것입니다. 또한 계속해서 서버를 유지하는 것은 많은 비용이 들기 때문에 장기적으로 부담 없이 지원이 가능한 P2P 방식을 하게 되었습니다.

호스트가 열지 않으면 다른 사용자들도 접속할 수 없다는 단점은 있지만 대다수의 멀티 게임이 갖고 있는 시스템이므로 크게 문제가 되지 않을 것 같다고 생각하였습니다.

 

 

UDP

 

실시간 온라인 게임은 정확성보다도 ‘빠름’이 우선입니다. 예를 들어 한 사용자가 이동을 할 때, 이동 경로를 순서대로 정확하게 받는 것보다 현재 위치를 빠르게 받아오는 게 중요한 것을 알 수 있습니다. 하지만 이렇게 정확성보다 빠름을 우선시 할 때는, 통신이 원활하지 않을 때 끊기듯이 보일 수 있다는 점도 있습니다.

 

이러한 방식을 원할 때는 통신 프로토콜로 TCP 보다 UDP를 사용하는 것이 좋습니다.

TCP는 연결 과정이 있고 신뢰성을 보장하기 위한 과정이 추가되므로 일반적으로 UDP보다 느립니다. 또한 UDP는 브로드 캐스트를 할 수 있습니다. 이를 통해 한 사용자로부터 받은 정보를 다른 모든 사용자들에게 전송하는데 편리합니다.

 

 

웹 서버

 

P2P 서버로 실시간 통신을 수행하지만, 사용자 데이터나 서버 관리를 수행하는 중앙 서버도 따로 두기로 하였고, 이는 Spring을 이용한 웹 서버로 하게 되었습니다.

 

이를 선택하게 된 이유는 제가 주로 개발하는 영역이 웹 서버이기도 하고 이를 더 활용해보고자 하는 목적이 큰 것 같습니다. 또한, 중앙 서버의 역할은 열려있는 서버들의 목록을 관리하고 접속자에 대한 정보를 관리하므로 빠른 속도가 필요하진 않으며 데이터를 저장하고 조회하는 역할이 중심이라 웹 서버가 적합하다고 생각했습니다.

클라이언트가 요청을 보내는 방법은 UnityWebRequest를 이용한 HTTP 통신을 하게 될 것 같습니다.

 


개발 일정

 

개발 일정은 위와 같이 순차적으로 진행하게 될 것 같습니다.

이것저것 할 게 많기 때문에 마감 기한을 정해두지는 않고 시간이 될 때 개발하는 것을 목표로 해야겠습니다.

 

 

포스팅 봐주신 분들 감사합니다.

반응형