解决 Edgegap 的网络代码问题
与...合作撰写
鲸鱼食物游戏
背景
描述 乔纳·沃勒斯坦,功夫踢球 的开发者,在作为一人团队开发实时多人在线游戏时耐心与机智,这样的说法未免太过轻描淡写。
他开发在线多人游戏的经历在游戏开发者网站上有详细介绍,他解释了自己在努力减少网络代码问题时所面临的挑战,并给出了相应的解决技巧。
问题
功夫踢球是一款竞技体育游戏,玩家通过踢、击和头撞的方式在场地上比赛,目标是将球踢进对手的铃铛来获得积分。任何游戏开发者都知道,在线格斗游戏因肌肉记忆和反应时间的重要性而尤其具有挑战性:糟糕的网络代码会破坏在线格斗体验。
从一开始,乔纳就始终考虑着 网络代码,他希望确保游戏没有延迟,且不会因为延迟给任何玩家带来不公平的优势。更重要的是:他希望功夫踢球可以实现跨平台游戏。
乔纳使用 Unity 开发游戏,最初想使用 Photon PUN 插件来实现功夫踢球的多人、跨平台功能。然而,他注意到 PUN 在处理玩家权限方面存在两个主要问题:
在点对点共享权限模式下:游戏体验会很奇怪,因为没有实际的同步状态,尤其是在处理每个玩家客户端的碰撞时
在点对点客户机主机权限下:这会导致主机拥有 0 毫秒延迟的不公平优势。

乔纳开始研究其他格斗游戏如何处理网络代码。他发现锁步/回滚网络代码(GGPO)通常用于点对点多人游戏。然而,他在传统的锁步/回滚网络代码实现上遇到了问题。
正如乔纳在他的 文章 中写道:
“锁步工作时可能出现的一个重要问题是延迟。有时甚至回滚也无法隐藏玩家之间的延迟。当游戏耗尽回滚帧时,必须停止并等待输入到达。这一问题在拥有超过两个玩家时会更加严重。如果有一个玩家的连接不好,其他人也会受到影响。”

这时他决定在游戏中增加公正的权限,并创建了他所称的“服务器授权回滚网络代码”,而不是点对点回滚。
但他的网络代码拼图仍然缺少某些东西。原因是,引入服务器可能会使响应时间变得更差。例如,如果服务器在纽约,而两名玩家在英国互相对战,延迟将比让他们进行点对点比赛要差。拥有多个服务器也不在考虑之中,因为他不想将玩家群体分开,并且未能在全球各个地区拥有服务器的奢侈条件。
他拼图的答案是以新的方式托管游戏服务器,这种方式结合了大量服务器位置池和即时可用性。
Edgegap 的帮助
乔纳找到了 Edgegap,该公司为他提供了按场比赛的一次性服务器,这得益于容器化和专有服务器。因此,最有可能为同一对英国玩家分配一台位于英格兰的服务器,或者就在附近。这样,他就不需要将用户群体划分为不同的地区,从而减少了配对匹配并提高了玩家体验。
Edgegap 不仅在性能上提供帮助,还考虑了成本方面。“Edgegap 允许我在以较低成本维持我正在支付的服务器数量的同时,拥有一个庞大的网络可供调用。”
最后,整合 Edgegap 快速而简单。乔纳只需将他的服务器应用程序转换为容器镜像,并将其链接到 Edgegap 平台。这种开关式的易用性使他能够在全球范围内几秒钟内部署游戏——并意味着功夫踢球拥有最先进的网络代码以及在几秒钟内通过 API 调用获得的 350 个服务器位置。对于这位雄心勃勃的独立游戏开发者来说,真的是两全其美。