Get started
Install and set up Matchmaker and create your first matching ticket.
Read time 4 minutesLast updated 2 days ago
This guide walks you through the different steps required to install the Matchmaker SDK, enable Matchmaker, create the first matchmaking ticket and create a Multiplay Hosting allocation.
Prerequisites
To get started with Matchmaker, you need to do the following:Configure your hosting
Before enabling Matchmaker, either initialize Multiplay Hosting or a client-hosted solution provided by Unity. Refer to Get Started with Multiplay Hosting, Get Started with Relay, and the Distributed Authority Quickstart.Install the Matchmaker SDK
To install the latest Matchmaker package for Unity:- In the Unity Editor's Package Manager, select Unity Registry.
- Search for the following package:
- For Unity 2022 LTS and later:
com.unity.services.multiplayer - For earlier versions of Unity:
com.unity.services.matchmaker
- For Unity 2022 LTS and later:
- Select the package and select Install. Refer to the Package Manager.
Set up Matchmaker
You can set up and manage Matchmaker through the Unity Dashboard:- In the Unity Dashboard, select the Products tab from the sidebar.
- Under Gaming Services > Multiplayer, go to Matchmaker and select Launch.
Create a queue and a pool
- Select Create a Queue. Choose a name for the first queue and set the maximum number of players on a matchmaking ticket. Click on Create.
- Select Create a Pool. Choose a name for the pool. Choose the queue that was created in the previous step. Set the timeout value for a ticket. Click on Next.
- Select your hosting type:
- If you're using Multiplay Hosting, first select Multiplay Hosting in the dropdown menu, then select the Fleet and Build Configuration created when Multiplay Hosting was configured.
- If you're using a client-hosted solution provided by Unity, select Client Hosting in the dropdown menu.
- Click Next.
This creates matches of one team with a minimum of one player and a maximum of five players.{ "Name": "Test", "MatchDefinition": { "Teams": [ { "Name": "Main team", "TeamCount": { "Min": 1, "Max": 1 }, "PlayerCount": { "Min": 1, "Max": 5 } } ], "MatchRules": [] }, "BackfillEnabled": false}
- Click on Logic Builder and set the Default QoS Region by selecting one the regions in the dropdown.
- Click on Create at the bottom of the page.
Create a matchmaking ticket
Now that the matchmaker is configured we can create and send a ticket to request a Multiplay Hosting allocation: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 tokencurl -X POST -H "ProjectId: <projectId>" https://player-auth.services.api.unity.com/v1/authentication/anonymous# 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/createTicketPoll ticket status
Once the ticket is created, the client polls to get the status of the ticket using the ticket ID returned when creating the ticket. When the ticket is assigned to a match and a server is allocated, Matchmaker adds the server information to the ticket status response.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 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/getTicketStatusMatchmaking Results
On the server side, when the server is allocated it is possible to fetch the Matchmaking Results about the match made using the Payload Allocation. Matchmaking results give the server information about the different players that are supposed to be in the match, their data as well as their distribution in the different teams.Unity SDK
var payloadAllocation = await MultiplayService.Instance.GetPayloadAllocationFromJsonAs<MatchmakingResults>();
CURL
curl -X GET http://localhost:8086/payload/<allocation_uuid>