如何同步在线解锁的宝石、硬币和关卡等游戏数据(统一平台)

Posted

技术标签:

【中文标题】如何同步在线解锁的宝石、硬币和关卡等游戏数据(统一平台)【英文标题】:How can i sync game data like gems, coins and levels unlocked online (unity platform) 【发布时间】:2019-10-06 15:20:29 【问题描述】:

我正在尝试像其他许多游戏一样在线保存游戏数据。 我希望用户通过任何来源(如 facebook、google 或任何其他来源)登录,然后用户的游戏进度应在线存储,当用户重置游戏或错误丢失设备数据时,他应该能够访问在线存储数据以检索他的进度信息,如硬币、宝石和解锁级别等。

我为此尝试了 google play 游戏服务,在那里我找到了排行榜和成就,但我没有找到保存用户游戏统计数据的方法。

我目前没有解决方案。

我希望在线存储数据,我的游戏用户应该能够在线同步数据。

【问题讨论】:

不确定我是否理解这里的问题,您肯定不允许本地客户端操作这些值吗?您的服务器后端应该处理这些细节、操作和存储,您的客户端应该只能获取当前值的副本,但所有操作(如购买宝石/硬币、花费它们等)都应该由您的服务器处理。 嗨..感谢您的快速回复。但我实际上想知道详细的解决方案。您能否发布一个链接以遵循统一服务器实现的步骤? 不幸的是,这将是一个非常广泛的问题。您需要研究服务器和后端开发、用于在其中存储数据的数据库(任何类型的)、为这类事情设计 API。 【参考方案1】:

如果您使用 Unity 并针对 androidios,您还可以查看 Firebase。您可以将用户统计信息存储在 Real-Time Database 中,它与 Unity 的集成非常好。

我没有一个很好的示例来存储消耗品和进度,但是有一个 open-source leaderboard sample 可以让你从基础开始,让你在不提交的情况下很好地了解代码的形状(大部分数据库相关代码在this source file)。

我建议的结构类似于:

用户列表:

user_id0 硬币 宝石 级别 user_id1 硬币 宝石 级别

您可以使用如下内容的 rules.json 文件来保证它的安全:


  "rules": 
    "Users": 
      "$uid": 
        ".read": "auth != null && $uid == auth.uid",
        ".write": "auth != null && $uid == auth.uid"
      
    
  

您必须使用Firebase Authentication 才能真正利用规则逻辑,但它应该支持您想要的大多数身份验证提供程序(包括您在Google Play Games 上的现有工作以及iOS 的游戏中心)。您可以通过登录 Google Play 游戏或使用众多不同的身份验证提供商之一来绑定您现有的工作。

对于我自己的流程,我喜欢将消耗性更新(可能是您的情况下的硬币和宝石)直接绑定到更新侦听器中,让 RTDB 的缓存系统使用ValueChanged 侦听器自行运行。更新数据库最好通过RunTransaction 调用来完成,这将帮助您在离线或用户在设备之间切换时处理极端情况。

【讨论】:

真的很有帮助......感谢这个简单的解决方案

以上是关于如何同步在线解锁的宝石、硬币和关卡等游戏数据(统一平台)的主要内容,如果未能解决你的问题,请参考以下文章

《植物大战僵尸》游戏数据修改

「网易官方」极客战记(codecombat)攻略-游戏开发2-硬币游戏第 5 步:平衡-game-of-coins-step-5-balance

「网易官方」极客战记(codecombat)攻略-游戏开发2-硬币游戏第 5 步:平衡-game-of-coins-step-5-balance

Redis分布式锁的正确加锁与解锁方式

SpriteKit, Swift 2.0 - 在游戏地图上生成对象

谷歌游戏中心能解锁两次成就吗