Nakama 多人游戏引擎 #

Nakama 多人游戏引擎可为所有游戏类别的协作和竞争游戏玩法提供驱动,其中的_单个 Nakama 节点_能够运行数百(或数千)个比赛,这随游戏玩法而定。请参阅基准,了解更多详细信息。

多人游戏功能与其他实时功能(即聊天)不同,因为这是游戏玩法数据(即玩家位置、移动)的实时交换。游戏的格式决定了玩家之间必须交换的游戏数据的性质,并最终决定了多人游戏的最佳构建方式。

多人游戏可以分为两类:同步实时或回合制。

同步实时 #

顾名思义,这些游戏需要快速、连续地交换玩家移动、投射物等游戏数据。同步实时多人游戏有两种实现:中继(又称客户端权威)和(服务器)权威。

中继 #

中继多人游戏模式中,Nakama 在客户端之间传递游戏数据,它不了解发送的数据是什么,也不监督数据是否正确。

服务器维护的仅有信息是每个比赛的 ID 和每个比赛存在的列表。用户可以从客户端发送消息,创建、加入和退出比赛。通过比赛传送的任何数据立即转发给所有其他比赛对手。

中继比赛保存在内存中,并存在于服务器中,直到最后一个比赛参与者退出。

权威 #

权威多人游戏模式中,服务器验证并广播所有游戏数据交换。在这个模式中,您可以为游戏规则编写自定义服务器运行时代码(即多少玩家可以加入,是否可以加入进行中的比赛等等),交由 Nakama 强制执行。

权威多人游戏适合快节奏的实时游戏。消息被发送到服务器,服务器计算环境和玩家的变化,数据被广播到相关的对等方。这通常需要较高的数据接收和计算率才能让游戏流畅。

回合制多人游戏 #

在回合制多人游戏中,游戏玩法在玩家之间轮转交替。每个玩家回合的频率因游戏类型而异。这些游戏可以是“主动”的或“被动”的。

主动 #

在“主动”回合制游戏中,玩家快速交替回合,并在比赛期间保持联系 – 例如《皇家冲突》或扑克游戏。在这类游戏中,服务器接收输入,对其验证,然后广播给玩家。预期的数据接收与计算率非常低,因为发送和接收消息的速率很低。

被动 #

在“被动”游戏中,游戏可以持续几个小时到几个星期 - 例如《Words with Friends》。在这里,服务器接收并验证输入,将其存储在数据库中,并在关闭服务器循环之前将变化广播到任何连接的对等方,直到下一个游戏序列为止。

被动风格游戏玩法的多人游戏实现方式将有所不同,这取决于游戏是完全异步的还是具有实时游戏玩法的元素 – 即玩家可能一起在线,您希望在他们之间实现实时交互。

对于前者,没有实时功能,可用群组 表示多人游戏“比赛”,所有比赛参与者都是同一群组的成员。“比赛”所有者可以是创建群组的用户或系统用户。

可以用 Nakama 存储引擎来存储比赛状态,每个“比赛”的群组 ID 为其存储到的 key。 然后您可以用一系列 RPC 来操纵存储的状态,并向群组(比赛)参与者发送通知。

对于具有一些实时功能元素的游戏,您可以使用具有允许的最低数据发送与计算率权威比赛1)。

在您的比赛逻辑中,比赛参与者列表应存储在比赛状态中。只要有比赛参与者在线,就向他们发送比赛状态,保持比赛循环运行。所有参与者离线后,您在比赛循环结束时,使用任何所需的 key 和系统用户 ID,将比赛状态写入数据库,然后终止比赛。

会话式多人游戏 #

会话式多人游戏通常只有复杂的物理/图形繁多游戏才需要,意味着您在服务器端运行游戏物理(例如在无头 Unity 或 Unreal 实例上),每个多人游戏都有一个专用服务器。

Nakama 可用来管理会话式多人游戏的无头实例,以及多人游戏玩法的其他方面。您可以使用 Nakama 的 Matchmaker(匹配程序)为玩家找到对手并创建比赛,而当比赛结束时,Nakama 可以报告结果并用于移动玩家。

与 Heroic Labs 联系,进一步了解如何在您的会话式多人游戏项目中使用 Nakama。

比赛列表 #

比赛列表是 Nakama 中可供玩家找到多人游戏比赛的两种方法之一,另外一种是匹配程序

比赛列表用于向玩家显示可加入的现有比赛列表,并可用于创建比赛大厅。此列表可根据比赛标签和任何其他所需的查询进一步调整。

Matchmaker(匹配程序) #

比赛列表用于查找供玩家加入的现有比赛,而 Nakama 匹配程序则允许用户找到对手和队友,以创建_新的_比赛、群组和其他活动。

匹配程序维护着一个用户池,这些用户当前正在寻找对手(或队友),只要有可能进行一场合适的比赛,就让他们聚集在一起。它接收并跟踪配对请求,然后根据用户在其属性和查询中表达的条件将用户组合到一起。