# 多人游戏引擎

**URL:** https://heroiclabs.com/docs/zh/nakama/concepts/multiplayer/
**Summary:** Nakama 多人游戏引擎由匹配程序、比赛和两个多人游戏架构组成。

---


# Nakama 多人游戏引擎

Nakama 多人游戏引擎可为所有游戏类别的协作和竞争游戏玩法提供驱动，其中的_单个 Nakama 节点_能够运行**数百**（或数千）个比赛，这随游戏玩法而定。请参阅[基准](../../getting-started/benchmarks/#workload-6---custom-authoritative-match-logic)，了解更多详细信息。

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

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

## 同步实时

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

### 中继

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

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

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

### 权威

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

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

## 回合制多人游戏

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

### 主动

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

### 被动

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

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

对于前者，没有实时功能，可用[群组](../groups/) 表示多人游戏“比赛”，所有比赛参与者都是同一群组的成员。“比赛”所有者可以是创建群组的[用户](../user-accounts/)或系统用户。

可以用 Nakama [存储引擎](../storage/)来存储比赛状态，每个“比赛”的群组 ID 为其存储到的 `key`。
然后您可以用一系列 [RPC](../../server-framework/introduction/#rpc-functions) 来操纵存储的状态，并向群组（比赛）参与者发送通知。 

对于具有一些实时功能元素的游戏，您可以使用具有允许的最低[数据发送与计算率](./authoritative/#tick-rate)的[权威比赛](./authoritative/)（`1`）。

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

## 会话式多人游戏

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

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

[与 Heroic Labs 联系](mailto:support@heroiclabs.com)，进一步了解如何在您的会话式多人游戏项目中使用 Nakama。

## 比赛列表

[比赛列表](./match-listing)是 Nakama 中可供玩家找到多人游戏比赛的两种方法之一，另外一种是[匹配程序](#matchmaker)。

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

## Matchmaker（匹配程序）

[比赛列表](#match-listing)用于查找供玩家加入的现有比赛，而 Nakama [匹配程序](./matchmaker/)则允许用户找到对手和队友，以创建_新的_比赛、群组和其他活动。 

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