시작하기
Install and set up Matchmaker and create your first matching ticket.
읽는 시간 2분최근 업데이트: 8시간 전
이 가이드에서는 Matchmaker SDK를 설치하고, Matchmaker를 활성화하고, 첫 매치메이킹 티켓을 만든 다음 Multiplay Hosting 할당을 생성하는 데 필요한 여러 단계를 살펴봅니다.
필수 조건
Multiplay를 시작하려면 다음을 수행해야 합니다.호스팅 구성
먼저 Multiplay Hosting 또는 Unity에서 제공하는 클라이언트 호스팅 솔루션을 초기화한 다음 Matchmaker를 활성화해야 합니다. Multiplay Hosting 시작하기, Relay 시작하기, [배포 권한 빠른 시작][Distributed Authority Quick Start]을 참조하십시오.Matchmaker SDK 설치
다음 단계를 따라 Unity용 최신 Matchmaker 패키지를 설치합니다.- Unity 에디터에서 Window > Package Manager로 이동합니다.
- Package Manager에서 다음 패키지를 검색합니다.
- Unity 6 이상:
com.unity.services.multiplayer - Unity 2022 LTS 이하:
com.unity.services.matchmaker
- Unity 6 이상:
- 패키지를 선택한 후 Install을 선택합니다.
Matchmaker 설정
Unity Dashboard를 통해 Matchmaker를 설정하고 관리할 수 있습니다.- cloud.unity.com으로 이동합니다.
- 사이드바에서 Products 탭을 선택합니다.
- Gaming Services > Multiplayer에서 Matchmaker로 이동한 다음 Launch를 선택합니다.
대기열과 풀 생성
- Create a Queue를 선택합니다. 첫 번째 대기열의 이름을 입력하고 매치메이킹 티켓의 최대 플레이어 수를 설정합니다. Create를 클릭합니다.
- Create a Pool을 선택합니다. 풀의 이름을 입력합니다. 이전 단계에서 생성한 대기열을 선택합니다. 티켓의 타임아웃 값을 설정합니다. Next를 클릭합니다.
- 호스팅 유형을 선택합니다.
- Multiplay Hosting을 사용하는 경우 먼저 드롭다운 메뉴에서 Multiplay Hosting을 선택한 다음 Multiplay Hosting이 구성될 때 생성된 Fleet과 Build Configuration을 선택합니다.
- Unity에서 제공하는 클라이언트 호스팅 솔루션을 사용하는 경우 드롭다운 메뉴에서 Client Hosting을 선택합니다.
- Next를 클릭합니다.
위 코드는 최소 플레이어 수가 1명이고 최대 플레이어 수가 5명인 팀 1개로 구성된 매치를 생성합니다.{ "Name": "Test", "MatchDefinition": { "Teams": [ { "Name": "Main team", "TeamCount": { "Min": 1, "Max": 1 }, "PlayerCount": { "Min": 1, "Max": 5 } } ], "MatchRules": [] }, "BackfillEnabled": false}
- Logic Builder를 클릭하고 드롭다운에서 지역을 선택해 Default QoS Region을 설정합니다.
- 페이지 하단의 Create를 클릭합니다.
매치메이킹 티켓 생성
Matchmaker를 설정했으니 이제 티켓을 생성하고 전달해 Multiplay Hosting 할당을 요청할 수 있습니다.Unity SDK
var players = new List<Unity.Services.Matchmaker.Models.Player>{ new ("Player1", new Dictionary<string, object>())};// Set options for matchmakingvar options = new CreateTicketOptions( "Default", // The name of the queue defined in the previous step, new Dictionary<string, object>());// Create ticketvar ticketResponse = await MatchmakerService.Instance.CreateTicketAsync(players, options);// Print the created ticket idDebug.Log(ticketResponse.Id);
CURL
# Fetch anonymous token##fetch-anonymous-tokencurl -X POST -H "ProjectId: <projectId>" https://player-auth.services.api.unity.com/v1/authentication/anonymous# Call the create ticket endpoint##call-the-create-ticket-endpointcurl -X POST -H "Authorization: Bearer <TOKEN>" \-H 'Content-Type: application/json' \--data-raw '{ "queueName": "Default", "attributes": {}, "players": [{ "id": "Player 1", "customData": {} }]}' \'https://matchmaker.services.api.unity.com/v2/tickets'
REST API
https://services.docs.unity.com/matchmaker/v2/index.html#tag/Tickets/operation/createTicket티켓 상태 폴링
티켓이 생성되면 클라이언트는 티켓을 생성했을 때 반환된 티켓 ID를 사용해 티켓 상태를 폴링합니다. 티켓이 매치에 할당되고 서버가 할당되면 Matchmaker가 티켓 상태 응답에 서버 정보를 추가합니다.Unity SDK
MultiplayAssignment assignment = null;bool gotAssignment = false;do{ //Rate limit delay await Task.Delay(TimeSpan.FromSeconds(1f)); // Poll ticket var ticketStatus = await MatchmakerService.Instance.GetTicketAsync("<ticket id here>"); if (ticketStatus == null) { continue; } //Convert to platform assignment data (IOneOf conversion) if (ticketStatus.Type == typeof(MultiplayAssignment)) { assignment = ticketStatus.Value as MultiplayAssignment; } switch (assignment?.Status) { case MultiplayAssignment.StatusOptions.Found: gotAssignment = true; break; case MultiplayAssignment.StatusOptions.InProgress: //... break; case MultiplayAssignment.StatusOptions.Failed: gotAssignment = true; Debug.LogError("Failed to get ticket status. Error: " + assignment.Message); break; case MultiplayAssignment.StatusOptions.Timeout: gotAssignment = true; Debug.LogError("Failed to get ticket status. Ticket timed out."); break; default: throw new InvalidOperationException(); }} while (!gotAssignment);
CURL
# Call the poll ticket status endpoint with same anonymous token as for the creation##call-the-poll-ticket-status-endpoint-with-same-anonymous-token-as-for-the-creationcurl -X GET -H "Authorization: Bearer <TOKEN>" \--header 'Content-Type: application/json' \'https://matchmaker.services.api.unity.com/v2/tickets/status?id=<TICKETID>'
REST API
https://services.docs.unity.com/matchmaker/v2/index.html#tag/Tickets/operation/getTicketStatus매치메이킹 결과
서버가 할당되면 페이로드 할당을 사용해 성사된 매치의 매치메이킹 결과를 서버 측에서 가져올 수 있습니다. 매치메이킹 결과는 매치에 참여할 것으로 예상되는 플레이어들의 정보, 해당 플레이어 데이터, 팀 간의 플레이어 분포에 대한 정보를 서버에 제공합니다.Unity SDK
var payloadAllocation = await MultiplayService.Instance.GetPayloadAllocationFromJsonAs<MatchmakingResults>();
CURL
curl -X GET http://localhost:8086/payload/<allocation_uuid>