入门
注意: 数字服务法 (DSA) 要求 Unity 在 Unity 采取影响 DSA 下最终用户行动时通知我们的客户的最终用户。为了符合此要求,如果您使用依赖 Unity 身份验证服务的 Unity 游戏服务 (UGS) 产品,您必须集成通知 API。
有关 DSA 的更多信息,请参阅数字服务法 - 合规性更新。
要使您的游戏符合规定,请参阅DSA 通知。
本指南将引导您完成安装匹配器 SDK、启用匹配器、创建第一个匹配票据和创建游戏服务器托管分配所需的步骤。
先决条件
要开始使用匹配器,您需要执行以下操作
配置您的托管
在启用匹配器之前,您必须初始化游戏服务器托管或中继。参见入门(游戏服务器托管)和入门(中继)。
安装匹配器 SDK
要安装适用于 Unity 的最新匹配器软件包
- 在 Unity 编辑器中,导航到 **窗口** > **软件包管理器**。
- 从 **软件包管理器** 中,搜索 **com.unity.services.matchmaker** 或滚动浏览 **Unity 注册表** 以查找 **匹配器** 软件包。
- 选择软件包,然后单击 **安装**。
有关更多信息,请参见软件包管理器 文档。
设置匹配器
您可以通过Unity 云仪表盘 设置和管理匹配器
- 转到cloud.unity.com。
- 从侧边栏中选择 **产品** 选项卡。
- 在 **游戏服务** > **多人游戏** 下,转到 **匹配器** 并选择 **启动**。
首次启动匹配器时,这会将匹配器添加到侧边栏上的 **快捷方式** 部分,并打开 **概述** 页面。
创建队列和池
- 选择 **创建队列**。选择第一个队列的名称并设置匹配票据上的最大玩家数量。单击 **创建**。
- 选择 **创建池**。选择池的名称。选择在先前步骤中创建的队列。设置票据的超时值。单击 **下一步**。
- 选择您的托管类型
- 如果您使用游戏服务器托管,请先在下拉菜单中选择 **游戏服务器托管**,然后选择配置游戏服务器托管时创建的 **舰队** 和 **构建配置**。
- 如果您使用中继,请在下拉菜单中选择 **中继**。
- 单击 **下一步**。
定义用于定义将票据发送到该队列和池时创建的匹配的规则。选择 **JSON** 并复制/粘贴以下代码块
{
"Name": "Test",
"MatchDefinition": {
"Teams": [
{
"Name": "Main team",
"TeamCount": {
"Min": 1,
"Max": 1
},
"PlayerCount": {
"Min": 1,
"Max": 5
}
}
],
"MatchRules": []
},
"BackfillEnabled": false
}
这将创建一个拥有至少一名玩家,最多五名玩家的单一团队匹配。
- 单击 **逻辑构建器** 并通过从下拉菜单中选择一个区域来设置 **默认 QoS 区域**。
- 单击页面底部的 **创建**。
匹配器现在已配置。您可以通过单击 **匹配器** 部分下的菜单中的 **队列** 来查看创建的队列和池。
创建匹配票据
现在匹配器已配置,我们可以创建和发送票据以请求游戏服务器托管分配
Unity SDK
var players = new List<Player>
{
new Player("Player1", new Dictionary<string, object>())
};
// Set options for matchmaking
var options = new CreateTicketOptions(
"Default", // The name of the queue defined in the previous step,
new Dictionary<string, object>());
// Create ticket
var ticketResponse = await MatchmakerService.Instance.CreateTicketAsync(players, options);
// Print the created ticket id
Debug.Log(ticketResponse.Id);
CURL
# Fetch anonymous token
curl -X POST -H "ProjectId: <projectId>" https://player-auth.services.api.unity.com/v1/authentication/anonymous
# Call the create ticket endpoint
curl -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 获取票据的状态。
当票据被分配到匹配并分配服务器时,匹配器会将服务器信息添加到票据状态响应中。
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
curl -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
匹配结果
在服务器端,当服务器被分配时,可以使用匹配结果 获取有关使用有效负载分配 进行的匹配的信息。
匹配结果为服务器提供有关应该参加比赛的不同玩家的信息,以及他们的数据以及他们在不同团队中的分配情况。
This code only works on the server allocated by Game Server Hosting.
Unity SDK
var payloadAllocation = await MultiplayService.Instance.GetPayloadAllocationFromJsonAs<MatchmakingResults>();
Note: Use the server.json file to get a server’s allocation UUID. [!NOTE] You will need to install the Game Server Hosting SDK to access the matchmaking results
CURL
curl -X GET https://:8086/payload/<allocation_uuid>