案例研究:解决 Edgegap 的网络代码问题

Kickin’ out netcode issues with Edgegap
Kickin’ out netcode issues with Edgegap
Kickin’ out netcode issues with Edgegap

解决 Edgegap 的网络代码问题

背景

乔纳·沃勒斯坦 描述为在独自开发实时多人在线游戏时耐心且足智多谋,确实是低估了他的能力。 

他在开发在线多人游戏过程中的旅程在《游戏开发者》上有详细介绍,他解释了在尝试缓解任何网络代码问题时面临的挑战,并提供了他是如何解决这些问题的技巧。 

Kung Fu Kickball - Screenshot - 8 Playable Champions

问题

《功夫踢球》是一款格斗运动游戏,玩家通过踢打和头槌的方式在场上冲撞对手,把球打入对方的钟声中以赢得积分。正如任何游戏开发者所知道的那样,在线格斗游戏尤其具有挑战性,因为肌肉记忆和反应时间的重要性:一个糟糕的网络代码会毁掉在线格斗体验。

从一开始,乔纳就将 网络代码 放在心上,因为他希望确保游戏没有延迟,任何玩家不会因为延迟而有不公平的优势。更重要的是:他希望《功夫踢球》能够跨平台游戏。

乔纳使用 Unity 开发游戏,最初考虑使用 Photon PUN 插件来实现《功夫踢球》的多人跨平台功能。然而,他注意到 PUN 处理玩家权限的两个主要问题: 

  • 在点对点共享权限模式下:游戏体验会很奇怪,因为没有实际的同步状态,尤其是在处理每个玩家客户端的碰撞时

  • 在点对点客户端主机权限下:这会使主机在 0ms 延迟下获得不公平的优势 

Kung Fu Kickball - Screenshot

乔纳开始研究其他格斗游戏如何处理网络代码。他发现锁步/回滚网络代码 (GGPO) 通常用于点对点多人游戏。然而,他对传统锁步/回滚网络代码的实现存在问题。

正如乔纳在他的 文章 中所写: 

“锁步时可能出现的一个重大问题是减缓。有时甚至回滚也不足以掩盖玩家之间的延迟。当游戏用尽回滚帧时,必须停下来等待输入到达。当有多于两个玩家时,这个问题会加剧。如果一个玩家的连接很差,那会减慢其他所有人的游戏。”

Kung Fu Kickball - Screenshot

这时他决定为游戏添加公正的权限,并创建了他所称的“服务器权威回滚网络代码”,而不是点对点回滚。 

但他的网络代码拼图仍然缺失了一部分。原因是?引入服务器可能会使响应时间变得更糟。例如,如果服务器在纽约而两个在英国的玩家互相对战,则延迟会比让他们进行点对点游戏更差。拥有多个服务器也是不可能的,因为他不想将玩家基础拆分,并且没有在世界各地区拥有服务器的奢侈。 

他拼图的答案是一个新的游戏服务器托管方式,结合了大型服务器位置池和即时可用性。

Edgegap 如何提供帮助

乔纳找到了 Edgegap,该平台根据每场比赛为他提供服务器,得益于容器化和专有服务器。因此,相同的两名英国玩家很可能会被分配到一个在英格兰的服务器,或者说是非常接近的某个地方。因此,他不必将用户基础分为不同地区,从而减少了匹配时间,改善了玩家体验。

Edgegap 不仅有助于性能,还在成本方面表现出色。“Edgegap 让我能够保持我在积极支付的服务器数量非常低,同时又拥有一个庞大的网络可供调动。”

最后,整合 Edgegap 非常迅速且简单。乔纳只需将他的服务器应用程序转换为容器镜像,并将其链接到 Edgegap 平台。这种“开关式”的易用性让他能在几秒钟内将游戏部署到全球任何地方——这意味着《功夫踢球》具备了最先进的网络代码,以及在调用 API 后几秒钟内可用的 350 个服务器位置。对于这位怀揣大志的独立游戏开发者来说,这真是完美的结合。 

书写者

Edgegap团队

与来源和/或内容协作

鲸鱼食品团队