### 멀티 플레이어 개요

스토브 게임 플랫폼은 멀티 플레이어 환경에서 게임에 적용할 수 있는 여러 가지 기능 및 API를 제공하고 있습니다.
그중 매치메이킹 시스템은 다양한 게임 유저가 어느 지역에서 접속하든지 낮은 지연으로, 함께 게임을 즐길 수 있도록 해 주는 서비스입니다. 매치메이킹 시스템에서 제공하는 API를 통해 게임 유저를 하나의 공유된 공간에 모아주고(매칭), 여기에 접속한 게임 유저들에게 채팅 메시지 및 데이터를 실시간으로 전송합니다.
매칭된 게임 유저들에게 실시간으로 채팅 메시지 및 데이터를 전송을 위해 여러 네트워크 서비스를 제공하고 있습니다.

- 암호화된 보안 세션을 통해 실시간 채팅 메시지 전송을 지원합니다.
- 소규모 게임의 실시간 데이터 전송을 위한 P2P 네트워킹을 지원합니다.
- 좀 더 규모 있는 게임을 위해 UDP 릴레이를 지원합니다.

개발자는 어떠한 네트워크 서비스를 사용할 것인지 사용할 서비스만 선택하시면 됩니다.

### 매치메이킹 소개

매치메이킹 시스템은 매치메이킹 서버와 클라이언트 SDK로 이루어져 있습니다.
Indie Developer Center을 통해 매치메이킹 서버에 게임을 등록하고, 매치메이킹 클라이언트 SDK로 게임 유저 매칭을 개발할 수 있습니다.
매치메이킹 시스템의 역할은 개개의 게임 유저들이나 그 친구들이 함께 게임을 즐길 수 있도록 한 곳(로비)으로 모아 주는 것입니다. 매치메이킹 시스템은 다음의 3가지 방법을 통해 게임 유저들을 한 곳(로비)으로 모으고, 같이 게임을 즐길 수 있도록 중계합니다.

- 첫 번째 방법은 랜덤 매칭입니다.
  게임 유저는 단순히 매치메이킹 서버에 빠른 입장을 요청하면, 서버 측에서 유저를 적절한 로비로 안내합니다. 이 방법은 개발이 쉽고 게임 유저 UI를 단순하게 만들 수 있습니다.
- 두 번째 방법은 검색 매칭입니다.
  게임 유저는 각 게임에서 정의된 특성에 따라 검색 조건을 설정하고, 그 조건에 충족되는 로비 목록을 선택할 수 있습니다. 이 방법으로 최대한 비슷한 레벨의 게임 유저를 만나 적절한 난이도에서 게임을 플레이할 수 있게 개발할 수 있습니다.
- 세 번째 방법은 친구 초대입니다.
  게임 유저는 내가 입장한 로비에서 내 친구를 초대하여 같이 게임을 플레이할 수 있습니다.

매치메이킹 클라이언트 SDK(Unity)를 사용하면 매치메이킹 시스템을 게임에 쉽게 적용할 수 있습니다.

### 매치메이킹 과정 순서

매치메이킹 서버에 접속한 후 랜덤 매칭하여 게임을 플레이하는 방법은 다음과 같습니다.

1. 해당 게임에서 멀티 플레이어로 플레이할 종류를 계획합니다. (ex. 난이도 : [쉬움, 어려움], 시나리오 : [맵1, 맵2] )
2. 게임 유저가 계획된 값중 하나로 로비 랜덤 입장 API를 호출여 입장합니다.
   - 게임 유저가 다음 값(난이도 = 쉬움 and 시나리오 = 맵1)으로 로비 랜덤 입장 API를 호출하면
     자동으로 로비를 찾아서 입장하거나 로비를 생성합니다.
3. 게임 시작에 필요한 최소 인원이 채워질 때까지 대기합니다.
4. 로비에 입장한 게임 유저 간 캐릭터나 유저 설정에 대한 데이터를 전송합니다.
   - 채팅 API를 통해 서로 채팅할 수 있습니다.
5. 게임을 시작할 준비가 완료되면 로비 방장은 게임을 시작합니다.
   - 데이터 송신 API를 통해 게임 데이터를 주고받을 수 있습니다. (P2P 혹은 UDP 릴레이)
6. 게임이 종료되면 로비 방장은 게임을 종료하고 로비는 자동으로 소멸합니다.

### 유니티에 매치메이킹 SDK 적용하기

- 매치메이킹 유니티 패키지를 설치하는 방법에 대해 알아봅시다.
- 유니티에 작성된 매치메이킹 SDK 코드에 대해 더 자세히 알아봅시다.

### 매치메이킹 API 설명서