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

How can i sync game data like gems, coins and levels unlocked online (unity platform)

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

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

我目前没有解决方案。

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

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

我没有存储消耗品和进度的好样本,但是有一个open-source leaderboard sample that will get you started with the basics and give you a good idea of what the shape of the code will look like without committing (most of the database related code is in this source file)。

我建议的结构类似于:

user_list:

  • {user_id0}
    • 金币
    • 宝石
    • 级别
  • {user_id1}
    • 金币
    • 宝石
    • 级别

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

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

您将不得不使用 Firebase Authentication to really take advantage of the rules logic, but it should support most auth providers you want (including your existing work on Google Play Games 以及 iOS 的游戏中心)。您可以使用 Google Play Games 登录或使用众多不同的身份验证提供商中的一个来绑定您现有的工作。

对于我自己的流程,我喜欢将消耗品更新(在您的情况下可能是金币和宝石)直接绑定到更新侦听器中,以便让 RTDB 的缓存系统 运行 自行使用 ValueChanged listeners. Updating the database is best done with the RunTransaction 调用,这将帮助您在离线时或用户在设备之间切换时处理极端情况。