简单、浏览和高级匹配的实现方法(已停用)
更新时间: 2024年5月23日
如需了解更多关于此 API 停用的信息,请点击此处。 第三方解决方案(如 Photon)可用作在您的应用中实现匹配的替代方案。有关 Photon 和其他第三方解决方案如何与平台 API 集成的示例,请查看此处。 本主题将指导您如何在应用中实现匹配。建议您分步集成匹配,先完成简单匹配,然后添加数据设置、查询和技能组件。有关这些功能及其添加方式的更多详情,请参阅
匹配技能、数据设置与查询页面。
This is a Platform SDK feature requiring Data Use Checkup
使用此功能或其他任何平台 SDK 功能之前,您需要完成数据使用情况检查 (DUC)。DUC 可确保您遵守开发者政策。这需要你团队的管理员证明你对用户数据的使用符合平台守则。在应用审核团队审核并批准您的 DUC 之前,平台功能仅供测试用户使用。在着手实现之前,请先思考您的游戏类型及其所需的匹配类型。如要了解不同类型的匹配,请参阅
匹配概述。
最基础的匹配场景是双人游戏,并且匹配不以技能为基础。在这种场景中,系统会匹配用户并将其分配到一个房间。系统会创建一个房间来托管匹配,并在匹配结束后将其删除。比如,西洋跳棋或井字棋等棋盘游戏非常适合简单匹配。如要创建采用简单匹配的应用:
- 创建一个匹配池。前往开发者面板,然后前往平台 > 匹配版块。使用以下设置:
- 池键 = TicTacToe、BestOfThree 或任何您想要在游戏中使用的值。
- 每次匹配用户数 = 所有字段均为 2。
- 技能组件 = 无
- 池应管理房间? = 否
- 应考虑 Ping 时间? = 否
- 选择保存并部署保存池。
- 创建池后,添加代码以将用户添加至匹配队列。为此,在客户端代码中调用
ovr_Matchmaking_Enqueue2()。用户将不断重新加入队列,直到匹配成功或取消。 - 用户加入队列后,监听匹配通知
ovrMessage_Notification_Matchmaking_MatchFound。如需了解平台 SDK 使用通知的详细信息,请访问请求与消息页面。 - (可选)查阅
OVR_MatchmakingEnqueueResult.h 文件,了解获取此时可向用户显示的队列状况信息的可调用方法列表。 - 在通知处理程序中,使用通知中的 roomID 调用
ovr_Room_Join2,将用户置于房间中。 - 您的游戏将通过监听
ovrNotification_Room_RoomUpdate 获取房间内的用户人数。当用户数量满足要求时,您的应用便会启动游戏。 - 需要注意的是,在匹配过程中,用户随时可以调用
ovr_Matchmaking_Cancel2() 来退出队列并终止匹配过程。
浏览匹配是指用户能够浏览和加入现有房间,以及创建房间让其他玩家加入。在这种场景中,必须允许匹配池管理房间队列。
下面的步骤演示了如何在支持用户浏览和选择匹配的游戏中实现匹配。
前往
开发者面板,然后前往
平台 > 匹配版块。选择
创建池。提供下列配置:
- 池键 = FreeForAll_Browse 或您要在游戏中使用的任何值。
- 池应管理房间? = 是
- 谁可以创建房间?选择用户
- 未匹配用户可加入匹配室? - 是
- 匹配服务可一直匹配到同一个房间? - 是
- 房间所有者离开房间时启用所有者迁移? - 是。注意,迁移房间涉及额外的实现工作。参阅房间所有权
- 每次匹配用户数 = 最低用户数为 2。最高用户数为 8。(不要为浏览匹配指定最低或最高首选用户数。这些值由用户在创建房间时定义。)
- 技能组件 = 无
- 应考虑 Ping 时间? = 否
完成池配置后,选择保存并部署保存池。
您的代码需要支持多种场景,具体取决于创建池时选择的配置设置,以及用户期望的服务使用方式。
如果用户想加入匹配:
- 通过调用
ovr_Matchmaking_Browse2 获取可用房间列表。 - 对
ovrMessage_Matchmaking_Browse2 响应进行处理,然后向用户展示房间列表。您可以通过定期调用浏览方法来定期刷新房间列表。 - 在用户选择房间时调用
ovr_Room_Join2。
如果用户想创建房间并主持匹配:
- 如要创建房间并将房间和用户加入队列,可调用
ovr_Matchmaking_CreateAndEnqueueRoom2 或调用 ovr_Matchmaking_CreateRoom2,处理响应,然后调用 ovr_Matchmaking_EnqueueRoom2。 - 处理
ovrMessage_Matchmaking_CreateAndEnqueueRoom2 或 ovrMessage_Matchmaking_EnqueueRoom2 响应。 - (可选)查阅
OVR_MatchmakingEnqueueResult.h 文件,了解获取可向用户显示的队列状况信息的可调用方法列表
您的游戏将通过监听 ovrNotification_Room_RoomUpdate 获取房间内的用户人数。当用户数量满足要求时,您的应用便会启动游戏。
注:在匹配过程中,您随时可以调用 ovr_Matchmaking_Cancel2() 将用户从队列中删除并终止匹配过程。
高级匹配可用于有多种玩法模式,玩家人数为 2 至 8 人的多玩家游戏。在这种场景中,玩家可以中途加入或退出游戏。您也可以选择允许用户浏览可加入的房间。为支持此类游戏,必须允许匹配池管理房间队列。您还应该允许用户和匹配服务创建房间,并允许用户浏览可加入的匹配。例如,在第一人称射击游戏中,由于存在多张地图或玩家可能希望浏览或匹配正在进行的游戏会话,因此可能需要启用支持浏览功能的房间队列。
前往
开发者面板,然后前往
平台 > 匹配版块。创建具有下列配置的池:
- 池键 =
CaptureTheFlag_TwoVsTwo 或您要在游戏中使用的任何值。 - 每次匹配用户数 = 最低用户数为 2。最小偏好用户数为 4。最大偏好用户数为 6。最高用户数为 8。
- 技能组件 = 无
- 池应管理房间? = 是
- 谁可以创建房间?如要启用高级匹配和浏览,选择用户和系统。如果不想启用浏览,只选择系统。
- 未匹配用户可加入匹配室? - 是
- 匹配服务可一直匹配到同一个房间? - 是
- 房间所有者离开房间时启用所有者迁移? - 否(如需了解所有者迁移的更多详情,请参阅下面的“房间所有权”部分)。此功能需要额外的实现。)
- 应考虑 Ping 时间? - - 否
- 完成池配置后,选择保存并部署保存池。
在该示例配置中,用户和系统均可创建房间,因此以下说明将介绍如何处理这两种场景。您需要支持不同/多种场景,具体取决于创建池时选择的配置设置,以及用户期望的匹配服务使用方式。
如果用户想加入匹配:
- 调用
ovr_Matchmaking_Enqueue2。用户将不断重新加入队列,直到匹配成功或取消。 - 处理用户已加入队列的通知
ovrMessage_Matchmaking_Enqueue2。如需了解平台 SDK 使用通知的详细信息,请访问请求与消息页面。 - (可选)查阅
OVR_MatchmakingEnqueueResult.h 文件,了解获取可向用户显示的队列状况信息的可调用方法列表。 - 监听匹配通知
ovrMessage_Notification_Matchmaking_MatchFound。 - 在通知处理程序中,调用
ovr_Room_Join2 将用户加入到 MatchFound 通知中指定的房间。
如果用户想创建房间并主持匹配:
- 如要创建房间并将用户和房间加入队列,可调用
ovr_Matchmaking_CreateAndEnqueueRoom2 或 ovr_Matchmaking_CreateRoom2,处理响应,然后调用 ovr_Matchmaking_EnqueueRoom2。房间将不断重新加入队列,直到匹配完成或取消。 - 处理
ovrMessage_Matchmaking_CreateAndEnqueueRoom2 或 ovrMessage_Matchmaking_EnqueueRoom2 响应。 - (可选)查阅
OVR_MatchmakingEnqueueResult.h 文件,了解获取可向用户显示的队列状况信息的可调用方法列表。 - 匹配服务将搜索匹配。
您的游戏将通过监听 ovrNotification_Room_RoomUpdate 获取房间内的用户人数。当用户数量满足要求时,您的应用便会启动游戏。
注:在匹配过程中,您随时可以调用 ovr_Matchmaking_Cancel2() 将用户从队列中删除并终止匹配过程。
每个由用户创建的匹配房间都会关联创建它的用户。创建房间的用户即为房间所有者。如果您已将池配置为允许更新房间设置,则该角色可拥有更新房间设置的权限。在多人游戏期间,可能需要转让房间所有权。有关更新房间数据和转让所有权的请求,请参阅
房间页面。
当房间所有者离开但未转让所有权时,您的池可配置为自动将所有权转让给待在房间时间最长的用户。在创建池时,为房间所有者离开房间时启用所有者迁移?选择“是”可启用此设置。
接下来,您可以为更高级的匹配场景添加技能组件或数据设置和查询。如需了解更多信息,请参阅
添加技能和使用查询。