Fika 制作公司如何通过点对点 Multiplayer 大受欢迎的《愚人船》扬帆起航

当Fika Productions开始着手填补合作 roguelite 游戏的市场空白时,他们将目光投向了沙发合作。然后,2020 年发生了。我们与首席游戏程序员丹尼尔-卡迈克尔(Daniel Carmichael)和开发人员雅尼克-凡德罗(Yannick Vanderloo)坐在一起,讨论了他们的游戏,并探讨了他们必须解决的一些开发难题,以便在业界复杂的时期将《愚人船》推向市场。
愚人船》的灵感来源是什么?您有航海背景的同事吗?
丹尼尔我们的灵感首先来自于填补合作式漫游灯的市场空白。我们都是roguelite类型游戏的粉丝,虽然有很多优秀的roguelite游戏,但我们觉得没有一款游戏能真正做好合作的部分。
从主题上讲,我们喜欢 "船 "的想法,因为如果船沉了,每个人都会沉下去。这就是主要的核心理念:齐心协力,让船继续航行。大家都没有航海经验,我们也不是海洋生物之类的东西。
工作人员中没有章鱼或咸海狗。知道了市场调研对您来说是什么样子的?
丹尼尔我们的市场调研其实只是一个小型的 Reddit 调研活动,但我们从中收获颇丰。我们在 25-30 个有关沙发合作和 roguelite 的 subreddits 上提出了这样一个问题:"您认为一款成功的合作 roguelite 游戏需要具备哪些条件?我们收到了许多建议,并将其归纳到一份文件中,寻找重叠之处和主题。这个过程验证了我们的一些想法,也给了我们一些新的想法。
在制作《愚人船》的过程中,您最喜欢的时刻是什么?
丹尼尔我们在办公室里经常插科打诨。每当我们推出一个小功能,就会有人说:"我们有游戏了!"有一天,我们合并了游戏中非常重要的一大部分,我对它进行了测试,我永远记得我对团队说:"我们有了一款可以销售的游戏!"那种感觉真的很不一样。这是我们非常自豪的时刻。
在游戏的 Multiplayer 开发过程中,有没有特别具有挑战性的方面,你们是如何克服的?
雅尼克在主机或客户端完全控制的情况下,游戏中的联网通常很简单。不过,当需要分割控制权时,比如某些元素由 Localization 玩家管理,而另一些则由游戏主机管理时,事情就变得棘手了。
在这种设置下,射弹尤其具有挑战性。我们希望它们在发射时能给人一种迅捷的感觉,这就需要考虑多种情况。此外,当敌人反击而玩家挡住射击时,我们必须精心策划互动,确保所有玩家都能感受到,即使在高延迟情况下也是如此。有很多边缘情况需要考虑。特别是如何让双方都能快速反应。
丹尼尔我们遇到的另一个大问题是网络建设。我们花了一年半的时间为本地化合作设计游戏,甚至没有考虑过在线游戏。然后咣当一声!大流行病袭来突然之间,我们的 Localization 游戏就没有什么意义了,因为大家都被困在家里,不能一起出去玩。
最初,我们追求的是面对面、即时的氛围。这就是我们比赛的核心。但随着大流行病的出现,我们的出版商就说 "嘿,我们得上网了",我们就说 "好吧,就这么办"。而且,我们感觉像是重新制作了一年的东西,为在线游戏调整了游戏的每个部分。
所以,给各位开发人员一个小建议:从一开始就要考虑到在线游戏,即使你还没有百分之百地做到这一点。一般来说,在设计时考虑到联机问题是一种明智之举,而且事后将其删除要比事后硬塞进去容易得多。
请告诉我更多关于管理射弹的信息,以及 Netcode for GameObjects 在这里是如何发挥作用的?
雅尼克将我们的游戏联网,最终成为一个独特的转折。我们没有传统的 GameObjects Netcode 设置。相反,我们有同时存在于客户端和主机端的对象,每个对象都知道对方的行动以及在任何时刻谁在控制。他们就像在不停地对话,互相通报最新情况。
例如,在发射子弹的场景中,如果子弹击中了主机一侧的目标,游戏会等待客户端确认击中目标。客户可能会同意,也可能会说:"不,我躲过了这一劫",甚至会说:"我反射了子弹!"游戏会根据客户的反应调整结果,确保双方步调一致。
这种设置具有很大的灵活性。客户端上的玩家可以看到自己的操作所产生的即时反应,比如子弹偏转,这让游戏感觉反应灵敏。不过,最终结果可能需要根据主持人的意见进行调整,如果出现差异,主持人的意见可能会推翻最初的反应。
这有点像舞蹈,权力有可能来回转换。我们发现,最简单的解决办法就是让双方各司其职,然后根据对方的反馈意见来协调分歧。这是一个合作过程,确保主机和客户端都能为游戏流程做出贡献。
下面为您的读者提供一些直观的解释。

在第一张图中,我们设置了 Multiplayer,我扮演左边的主机 Todd,我的 Friends 是右边的客户端 Hink。

然后,一个螃蟹怪敌人突然出现并发射了一枚弹丸。这里的关键在于协调:主机和客户端都通过远程过程调用获得通知。两名玩家都能看到弹丸,但弹丸是击中船只还是偏转取决于玩家的反应,主机需要等待客户端的输入来确认最终结果。

最后,我们来看看扮演 Hink 的客户端偏转射弹时会发生什么。如果 ping 很高,就会有一点延迟,所以虽然主机最初可能会看到弹丸击中船,但一旦客户端的反应得到确认,就会自动纠正。这样,客户端就不会感到延迟--就好像他们在进行实时游戏一样,而他们的操作会被主机镜像,以保持游戏同步。
整个想法就是要确保当你在紧要关头开枪射击或抵挡攻击时,游戏能立即做出反应,让多人游戏体验感觉天衣无缝。
还有其他具体情况可以分享吗?我们的读者有什么深刻的经验教训吗?
丹尼尔我们遇到了很多挑战,但其中最大的挑战就是内存管理。让我们熟悉组装和 Addressables 是一个陡峭的学习曲线,特别是因为这是整个团队的第一款多人游戏。
有趣的是,我们的游戏资产量并不大,但加载时间却一度达到两分钟,这对于一款小型游戏来说简直太疯狂了。这无疑引起了球员们的不满。
因此,在保持内存和资产精简方面,我们付出了艰辛的努力。我们应该从一开始就把基础工作做好。
Addressables 如何?你在那里具体学到了什么?
雅尼克Addressables 的交易非常简单。您必须将资产组织成组,以便同时加载。这样,你就不会因为在特定场景中根本用不到的东西而使游戏陷入困境。
例如,我们的游戏有不同的区域,每个区域都有自己的敌人、场景和风景。起初,我们把所有东西都集中到一个大组中,这对加载时间来说是个噩梦。为了简化工作,我们开始按部门对资产进行分组。这带来了巨大的变化,因为现在我们可以根据需要只加载敌人或某个区域的场景,从而使一切都变得更加高效和顺畅。
为什么选择 Netcode for GameObjects (NGO) 进行联网?
雅尼克我们选择非政府组织进行联网,主要是因为它得到了 Unity 的支持。这意味着它有可能与平台一起发展,并获得长期支持,这对我们来说至关重要。此外,NGO 拥有我们需要的所有功能。
我们想要的关键是点对点连接,以避免服务器成本,这对一款未来销量和玩家基础都不确定的游戏来说是一笔大交易。有了非政府组织的帮助,我们深信,无论从目前的需要还是未来的发展来看,我们都是一个安全的选择。留在 Unity 生态系统内并确保对我们游戏的长期支持似乎是一个明智的选择。
愚人船的下一步计划是什么?
到目前为止,我们已经推出了两个包含大量新鲜内容的大型更新,并推出了两个 DLC,引入了新的角色来丰富游戏内容。这些 DLC 完全是可选的,为玩家提供了更多的选择,而不会让玩家在决定不买这些 DLC 时感到被遗弃。最酷的是什么?这些主要内容更新都在房子里,从我们看到的情况来看,人们真的很喜欢它们。
至于接下来会发生什么,我们已经有了计划,但现在还得保密。不过,当我们准备好透露未来的更新时,您一定会知道的。
对 Multiplayer 开发感兴趣?请浏览 2024 Unity 游戏报告中的Multiplayer 部分 ,了解成功工作室的见解、关于为什么越来越多的工作室开发多人游戏的新鲜数据,以及帮助您和您的团队保持领先地位的大量技巧。