匹配 #
许多多人游戏的一个主要特点是能够发现并对抗随机对手。
由于Nakama知道其他在线玩家,所以最好在此安排玩家之间的比赛。Nakama匹配功能简化了比赛的创建与管理,因此您无需自己构建架构。
服务器端设置 #
Nakama通过轮询玩家从客户端提交的门票来处理服务器端的匹配。这些门票通常包含玩家和他们正在寻找的比赛类型的信息。
首先,我们在服务器上设置匹配设置,以便可以接受传入的门票。关于服务器如何处理比赛请求,有三个选项可以更改:
max_tickets
:限制玩家(或组)一次可提交的门票总数interval_sec
:更改每次尝试形成新比赛之间的时间(秒)。间隔越短意味着等待时间越短,可能需要更多的服务器资源来处理请求max_intervals
:设置在使用最小玩家限制之前尝试最大玩家限制的次数
这些都是玩家无法更改的服务器设置。 为了配置这些选项,我们创建配置文件。
在Pirate Panic中的配置文件是local.yml
,但是在您的游戏中,此配置文件可以是您所需的任何内容。在配置文件中,我们为匹配处理程序创建了一个部分:
local.yml
|
|
有关服务器配置其他部分的参数及其默认值的完整列表,请参阅文档。
请求比赛 #
现在我们已经设置了服务器来处理请求,可以让玩家创建门票,方法是使用AddMatchmakerAsync
:
|
|
这张门票描述了一名玩家在寻找共有两名玩家的任何比赛(*
通配符查询)。您还可以限制查询以查找具有匹配属性的特定玩家。例如,为仅与欧洲的其他玩家匹配,您可以做出query = "+region:europe"
。请参阅匹配程序文档中的更多示例。
stringProperties
和numericProperties
可用于存储用户数据(例如名称、地区或排名),以与匹配程序一起使用。在本例中,我们没有偏好,所以可以不改变此null
。
为了让玩家可以在未找到比赛时选择取消其匹配,应该在AddMatchmakerAsync
返回的门票上使用 RemoveMatchmakerAsync
:
|
|
加入比赛 #
提交门票后,服务器将处理匹配并为所有匹配的玩家分配新比赛(如果可以找到)。
然后,我们可以在客户端注册一个回调函数,以便在发生这种情况时运行,该函数可以用于切换场景或为加入比赛做准备:
|
|
此处ReceivedMatchmakerMatched
是一个 Register 挂钩,在服务器找到对手时会自动触发。