Firebase 实时多人游戏

Posted

技术标签:

【中文标题】Firebase 实时多人游戏【英文标题】:Realtime Multiplayer Game with firebase 【发布时间】:2021-03-13 07:43:49 【问题描述】:

我刚刚创建了一款带有 Flutter 的手机游戏,并希望将其扩展到多人在线游戏。所以我想用firebase来做。我对这个领域比较陌生,所以我希望我的问题听起来不会太愚蠢。

随着我游戏中的角色流畅地移动,我需要每帧至少更新一次他们的位置,所以在使用 firebase 的情况下,我需要一个每秒运行 60 次且永不结束的云功能。然后,此函数将获取游戏中的所有对象(存储在实时数据库中)并根据它们的速度更新它们的位置。更新的值被写回客户端监听的数据库。它们更新游戏中的值并将对象渲染到正确的位置。每当玩家以某种方式与游戏交互时,都会调用另一个云函数来处理并更新所需的内容。

有没有可能做这样的事情,这有意义吗?以这种方式使用云功能对我来说听起来不是很顺利,但我没有实现它的另一个想法。它将如何影响成本?听起来像很多函数调用和数据库读/写..

如果这完全不可想象,还有什么替代方案?我不会太介意使用另一个数据库和/或框架来制作游戏本身。

非常感谢

【问题讨论】:

这与 Firebase 完全没有关系。您只需使用 Photon(例如)- 您可以在五分钟内运行它。恩诺伊。 还要注意,Firebase 与实时无关 - 您可能会想到 PubNub,这是世界上主要的实时网络,非常棒(点击并尝试他们的演示)。但是,如果您想制作实时 MP 游戏,您当然可以使用许多可用的系统。 【参考方案1】:

通过数据库传达位置等信息的速度不足以让您每秒执行 60 次。您将不得不使用某种形式的混合 UDP 和 TCP 解决方案,不幸的是,它并不像某些游戏引擎那样为 Flame 预先构建,但是根据复杂程度自己构建一个可能不会太复杂你的用例是。

就像@Fattie 建议的那样,试试PubNub 是否适合你可能是个好主意。

更新:Flutter here 的 Nakama(开源游戏服务器)集成现在处于早期阶段。

【讨论】:

我不会投反对票,但这有点像建议需要电子表格来记录他们在星巴克的支出的人......他们学习软件工程,然后开发一个从头开始 SQL 数据库,并使用它:) @fattie 因为 Flame 是一个非常简单的 2D 游戏引擎,取决于玩家之间需要什么类型的交互和准确性,推出自己的解决方案不一定需要那么难。 火焰是壮观的顺便说一句。要使用 Flutter/Flame 进行 R/T MP 演示,我建议只使用 PubNub,这不会花时间。 pubnub.com/developers/demos/codoodler(所有的演示都很棒)。它是世界上主要的实时骨干网,没有什么比这更快了,Flutter 就是这样 - 仅此而已 如果您编辑答案以添加,我将删除我的反对票。 :)【参考方案2】:

Firebase 与您正在尝试做的事情完全没有联系。

您只需使用 Unity 和其中一种实时多人游戏服务 - 例如 Photon

令人难以置信的是,作为一个业余爱好者,您会从头开始尝试编写实时、帧间、可预测的 quat。网络!

五分钟后...

https://doc.photonengine.com/en-us/pun/v2/demos-and-tutorials/pun-basics-tutorial/intro

下载 Photon/Unity 演示并玩实时多用户游戏需要 5 分钟。

然后您只需学习如何添加枪支或其他任何东西并添加您自己的模型。

火焰...

火焰是壮观的顺便说一句。要使用 Flutter/Flame 进行 R/T MP 演示,我建议只使用 PubNub,这不会花时间。

http://pubnub.com/developers/demos/codoodler(所有的演示都很棒)。它是世界上主要的实时骨干网,没有比这更快的了,他们使用 Flutter 就是这样 - 仅此而已。

【讨论】:

您正在回答一个无关游戏引擎的问题。 嗨@spydon! “如果这完全不可想象,还有什么替代方案?” 这完全不可想象,我已经解释了要做什么 你说得对,这就是所写的,但我不认为这是他的意思(重写/移植他当前的整个游戏)。这也不是“完全不可想象的”,以前在 Flame 社区已经做过。

以上是关于Firebase 实时多人游戏的主要内容,如果未能解决你的问题,请参考以下文章

Google Play 游戏服务中的多人游戏 API 将不再可用。如何迁移到 Firebase?

Firebase 适合实时棋盘游戏后端吗? [关闭]

使用云功能在 Firebase 实时数据库中交换排名 - 游戏

Firebase实时数据库GroupBy方法

如果 Firebase 实时数据库中包含列表,我如何检索对象?

如何将 Google Play 游戏登录与 Firebase 身份验证结合使用