PlayFab Multiplayer SDK 还提供了 PlayFab Lobby 的 API。 * 有关 C++ API 的更多信息,请参阅 Lobby SDK 快速入门 * 有关 Unity API 的更多信息,请参阅 Unity 快速入门 * 有关 Unreal API 的更多信息,请参阅 Unreal 快速入门
先决条件
你需要一个 PlayFab 帐户才能使用 PlayFab Matchmaking。有关创建帐户的说明,请参阅快速入门:Game Manager。在 Game Manager 中配置匹配队列
该库会将为在 Game Manager 中配置的队列创建工单的用户匹配在一起。有关如何设置的详细信息,请参阅配置匹配队列。下载并设置 PlayFab Multiplayer SDK
下载适合你平台的 C/C++ SDK,并将提供程序头文件和库文件集成到你的 build 中。本快速入门主要关注使用 C/C++ SDK。有关 Unity 和 Unreal 接口,请参阅以下文章: * Unity 快速入门 * Unreal 快速入门
登录 PlayFab 实体
要使用 PlayFab Lobby SDK,你需要使用 PlayFab 实体密钥和实体令牌对客户端进行身份验证。通过 LoginWithCustomId REST API 登录来获取一对 PlayFab 实体密钥和令牌。此 API 也可以通过 PlayFab REST SDK 以 C/C++ 投影方式使用。LoginWithCustomId 是快速开始使用 PlayFab 功能的一种方式,但并不适合作为你正式发布时使用的登录机制。有关登录指南,请参阅登录基础与最佳实践。
初始化 PlayFab Multiplayer SDK
按照以下基本步骤初始化 PlayFab Multiplayer SDK:- 通过调用 PFMultiplayerInitialize 初始化 SDK
- 通过调用 PFMultiplayerSetEntityToken 设置库代表玩家使用的实体密钥和令牌。
创建匹配工单
使用 PFMultiplayerCreateMatchmakingTicket 创建匹配工单,在其中指定应作为对局一部分的所有本地用户,以及你希望与这些用户关联的任何属性。 此函数还接受一个 PFMatchmakingTicketConfiguration,你可以在其中指定工单对应的队列、工单的超时,以及要匹配到此工单中的任何远程用户。单个本地用户的匹配
你可以通过调用 PFMultiplayerCreateMatchmakingTicket 为单个本地用户启动匹配。与一组远程用户的匹配
要开始与远程用户的组匹配,可将某个客户端视为组长。让组长使用 PFMultiplayerCreateMatchmakingTicket 创建工单,并通过 configuration 参数指定组中的其他用户。工单创建后,调用 GetTicketId 以获取工单 ID。通过外部机制(例如网络网格或共享的 PlayFab Lobby)将此 ID 发送给每个其他用户,并让每个客户端使用工单 ID 调用 PFMultiplayerJoinMatchmakingTicketFromId 来加入该匹配工单。工单状态在等待指定玩家加入时将为 PFMatchmakingTicketStatus::WaitingForPlayers,当所有玩家加入工单后将变为 PFMatchmakingTicketStatus::WaitingForMatch。多个本地用户的匹配
在与多个本地用户进行匹配时,不是向 PFMultiplayerCreateMatchmakingTicket 或 PFMultiplayerJoinMatchmakingTicketFromId 函数传入一个 PFEntityKey,而是需要传入一个密钥列表。同样,你需要为每个用户传入一个属性列表。每个列表条目位置应彼此对应。也就是说,属性列表中的第一个条目应是 PFEntityKey 列表中第一位玩家的属性。检查匹配工单的状态
必须通过调用 PFMultiplayerStartProcessingMatchmakingStateChanges 来接收状态变更,并在处理完这些状态变更后调用 PFMultiplayerFinishProcessingMatchmakingStateChanges,以检查工单的更新。 每当工单的状态发生变化时,SDK 都会返回一个 TicketStatusChanged 状态变更;当匹配完成时,SDK 会返回一个 TicketCompleted 状态变更。使用 Matchmaking client SDK 的示例
获取对局
在收到 PFMatchmakingStateChangeType::TicketCompleted 状态变更后,调用 PFMatchmakingTicketGetMatch 以获取对局的详细信息。这些详细信息将包含对局 ID、已匹配到一起的用户、对局的首选区域,以及与对局关联的大厅编排字符串。 从 PFMatchmakingMatchDetails 结构中检索所需的信息后,应使用 PFMultiplayerDestroyMatchmakingTicket 销毁工单。使用 Matchmaking client SDK 的示例
取消匹配工单
如果你的客户端出于某种原因希望在PFMatchmakingTicketConfiguration 中设置的超时之前取消匹配过程,请使用工单句柄调用 PFMatchmakingTicketCancel。
调用此 API 并不保证工单会被取消。工单可能在取消操作被处理之前已经完成,或者取消请求可能因网络或服务错误而失败。如果希望在继续之前确认工单取消已完成,你仍可以处理匹配状态变更以获取工单的结果。否则,你可以立即调用 PFMultiplayerDestroyMatchmakingTicket。
使用 Matchmaking client SDK 的示例
(可选)将玩家连接到 Lobby 中
玩家匹配后,他们可以一起加入一个大厅。已匹配工单的 PFMatchmakingMatchDetails 包含一个 lobbyArrangementString 字段,可用于将用户加入同一个 Lobby。 有关 Lobby 与 Matchmaking 如何协同工作的更多信息,请参阅结合使用 lobby 与 matchmaking。 有关 PlayFab Lobbies 的更多信息,请参阅 PlayFab Lobby 概览。使用 Matchmaking client SDK 的示例
结论
使用本快速入门,你现在应该在游戏中拥有一个成功的匹配流程。此外,你还应考虑以下方面:- 你的游戏如何处理组的形成。
- 玩家等待对局时你的游戏显示什么。
- 如何处理失败和重试。
