#36 온라인 멀티플레이

국기웅·2024년 6월 13일

요즘은 멀티플레이 게임들이 매우 핫하다
특히 한국에서는 리그 오브 레전드, 배틀그라운드 등등 PC방 문화에서부터 발전된 멀티플레이 관련된 게임들은 이미 몇년째 점유율을 독차지하고있다.
내 주변에는 Steam 게임을 하는 사람들이 매우 적은데, 그럼에도 하는 게임이 멀티플레이 요소가 있는 펠월드와 같은 게임들이다.

멀티플레이 게임을 개발하는데 필요한 지식들을 배워, 그에 대해 작성해 보겠다.

  • IP Address, Port
    - 기본적으로 네트워크상에 들어간 장치들은 고유 식별자인 IP주소를 가지고 있다. 여기에 포트를 통해 더욱 자세한 위치를 지정한다.
  • 패킷 : 네트워크로 전송되는 데이터의 작은 단위이다. 데이터는 여러개의 패킷으로 분할되고, 도착지에서 다시 조합된다
  • 라우팅 : 패킷이 출발지에서 도착지로 갈때까지 필요한 네트워크 장치들 사이에서 이동하는 경로이다
  • TCP, UDP
    • TCP(Transmission Control Protocol)은 데이터의 보유 여부를 확인하고 데이터를 받는 과정이 존재한다. 따라서 신뢰성있고, 데이터의 조합이 좋다. 하지만 속도는 느릴 수 있다.
    • UDP(User Datagram Protocol)은 빠른 속도가 특징이다. 데이터를 계속 쏴주는 형식인데, 패킷이 손실될 수 있다.
  • Client-Server Model : 서버가 중앙에서 클라이언트의 요청을 처리하고 응답한다.
  • Dedicated Server : 게임의 로직과 플레이어 데이터를 처리하는 서버이다
  • Host-Client : 한 플레이어가 게임 호스트와 클라이언트의 역할을 수행한다. 호스트의 인터넷 상황이 좋지 않으면 참가자 전체의 네트워크가 불안해질 수 있다.
  • Peer to Peer Model : 각 참가자(피어)들이 서로 통신하는 구조이다. 네트워크 리소스를 효율적으로 사용하지만, 악성 유저를 방지하기 어렵다고 한다.

네트워크를 위한 여러가지 백엔드 솔루션들이 존재한다
Photon PUN2, UGS, GoogleFirebase, PlayFab, Backnd(뒤끝) 등 여러개가 존재하지만, 이번에 배운 것은 Photon Pun2이다.

Photon Pun2는 유니티와 통합이 되어 쉬운 사용이 가능하다. Auto Scaling, 간단한 매치메이킹 등을 제공한다고 한다. 그리고 쉬운 API구성으로 적용도 간단하다.


Photon에서 주로 사용하는 클래스와 메서드는 다음과 같다

  • PhotonNetwork 클래스
    • ConnectUsingSettings() 앱을 포톤 클라우드에 연결할때 사용함
    • CreateRoom, JoinRoom 방을 만들고, 참여하는데 사용함
    • Instantiate 네트워크를 통한 오브젝트 생성이다. 오브젝트는 네트워크로 동기화된다.
  • MonoBehavioirPunCallbacks 클래스
    • OnConnectedToMaster 게임이 마스터 서버에 연결되었을때 호출된다
    • OnJoinedRoom 플레이어가 방에 입장되면 호출
    • OnPlayerEnteredRoom 다른 플레이어가 방에 입장하면 호출

profile
게임개발호소인

0개의 댓글