在Unity中为点对点联网游戏添加中继器 - 视频教程 (Mirror Networking 网络代码)

请注意,此特定视频使用 Mirror Networking 作为示例。NGO 和 Fish-Net 视频很快就会提供,然而除了某些文件的文件夹和位置外,整个过程中没有任何变化。

我们将在几分钟内讲解如何将 Edgegap 的分布式中继添加到你的多人游戏中以进行点对点网络连接。

中继作为玩家之间的中间连接,无需使用专用服务器。此外,中继帮助绕过与玩家直接连接相关的限制,例如严格的防火墙或 NAT 设置,并通过在运行游戏的同时处理网络流量来提高性能。有关详细信息,请查看描述中链接的我们的博客。

让我们直接进入正题!

第1章设置

在游戏中实现中继之前,你首先需要一个令牌,让游戏可以与 Edgegap 的中继会话 API 互动。

要获取令牌,请创建一个 Edgegap 帐户或直接登录到你的帐户。

从仪表板中,使用左侧边栏导航到中继页面。向下滚动到“中继配置”部分。这里,点击“创建中继配置”。给令牌一个昵称,然后点击“提交”。你的中继 API 令牌现在可见。

此令牌在你的项目中用于管理 API 请求;即创建新中继会话、获取现有会话的信息,并终止它们。

虽然开发期间是可选的,但我们强烈建议将中继与大厅结合起来。因为它将玩家分组并为他们创建一个会话。好处很多,包括提高隐私(如保护玩家的 IP 地址)、自动化以及防止作弊者和黑客,等等。我们的大厅简单指南已链接

在本教程中我们将使用手动连接,但我们将强调代码中大厅查询的位置。

无论使用哪种分组方法,一旦玩家被选为中继会话的一部分,它都需要连接。此传输可以是任何网络代码解决方案,例如 Mirror Networking、Fish-Networking 或 Unity GameObjects 网络代码。Edgegap 文档以及我们在GitHub 上的示例涵盖了这些网络代码的每个应用。

第2章网络经理

现在,进入实际工作!

首先,我们将在你的游戏项目中添加 Edgegap 示例。

从文件管理器,前往 Edgegap 示例文件夹,然后进入三个示例网络代码可用的子文件夹。选择你的网络代码,在这个特定示例中,我们选择“Mirror”。

复制名为“Edgegap”的文件夹。

切换到你的项目文件夹。选择“资产”,然后是你的网络代码,再次为“Mirror”。接着点击“传输”,现在粘贴 Edgegap 示例项目的文件夹。

现在,在 Unity 中打开你的项目。

第一步是用示例中的新传输组件替换你的传输组件。要做到这一点,从编辑器中,先选择“网络管理器”。

然后,移除你当前的传输组件,在这个例子中名为“KCP 传输”。

然后,打开资产中的 Edgegap 示例。在我们的示例中路径以选择项目开始,这里名为“Mirror”,然后点击“传输”,选择“Edgegap”,接着是“Edgegap Relay”。文件名为“Edgegap KCP Transport dot CS”。拖放到编辑器中的网络管理器。

第三步是再次打开网络管理器,然后选择“传输”以添加新的 Edgegap KCP 传输。

最后,在传输的检查器中确保禁用“Relay GUI”。

第3章脚本 - 发送请求到 Edgegap API

由于我们缺乏大厅系统,下一步是创建一个脚本来发送请求到 Edgegap API。需要添加三个函数。

第一个是创建一个新的中继会话,第二个是获取特定中继会话的数据,第三个是让其他玩家加入现有中继会话。每个请求都需要在身份验证头中包含“中继配置 API”令牌,使用“令牌”作为其“方案”,并使用我们从 Edgegap 生成的令牌作为其“值”。

要创建一个新的中继会话,请在请求主体中包含每个组中玩家的独立 IP 地址列表。如果你使用大厅,它会来自该组件,但由于我们的示例是手动分组玩家,我们可以为每个玩家使用相同的 IP 进行测试。为了使这个示例尽可能简单,让我们只选择两个玩家。一旦会话创建,其唯一 ID 将包含在 API 响应中。

我们使用响应中的唯一会话 ID 发送“GET 请求”来获取特定中继会话的信息,使用 ID 作为路径参数。此函数将持续发送相同的请求直到响应显示中继准备好接受连接。

一旦中继准备就绪,我们返回最新的响应内容以备后用。

我们使用第三个函数让其他玩家加入我们已知 ID 的中继。它还会发送带有唯一中继会话 ID 的 GET 请求以获取信息,但跳过验证,因为我们在已知中继准备好时手动调用此函数。我们返回响应内容以备后用。

这些函数让我们可以在没有大厅的情况下手动测试中继。通常,主机和其他玩家会同时等待中继准备好,然后在数据可用时一起加入。

从那里,创建一个新脚本来协调此过程和玩家的输入。在我们的示例中,我们创建一个带有输入字段和两个按钮的基本 UI,并将脚本附加到一个游戏对象上。

“创建”按钮调用我们的创建请求函数,而“加入”按钮使用输入字段的值作为要加入的会话的 ID 并调用加入请求函数。

一旦数据返回,使用它来设置传输的值。所需的值是“会话授权令牌”,在会话中的每个玩家之间共享的,“用户授权令牌”是每个玩家唯一的,中继的“IP 地址”,“服务器端口”由请求会话创建的主持比赛的玩家使用,和“客户端端口”由其他玩家使用。

在这个示例中,主持玩家的唯一令牌在响应的列表中是第一个,而加入玩家的令牌是第二个。

一旦设置了这些值,使用适当的传输函数来启动连接,具体取决于玩家是否为主持人。从那里,玩家现在可以开始玩你的游戏了!

不过,还有一件事情要做。你必须包含一个系统来发送 API 请求以在比赛结束后终止中继会话。这结束了玩家与中继的连接。

第4章结论

这就是关于在游戏中添加中继的教程!

你开发的下一步可能是超越点对点,使用权威服务器。确保查看我们的 Unity 视频教程。

如果有问题或需要帮助,欢迎加入 Edgegap 的Discord社区。

感谢观看!