我如何同步在线解锁的宝石,硬币和关卡等游戏数据

时间:2019-05-20 09:18:44

标签: c# firebase unity3d google-play-games

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

我为此尝试了Google Play游戏服务,在其中找到了排行榜和成就,但没有找到保存用户游戏统计信息的方法。

我目前没有解决方案。

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

2 个答案:

答案 0 :(得分:0)

如果您是第一次这样做,那么自己处理这些事情可能会非常棘手(从您所询问的问题看来)。

我将依靠第三方库和服务来实现这一目标。

您可以使用Microsoft的Azure Playfab:https://playfab.com/

=> GetUserData获取保存在服务器上的数据(在playfab上)
=> UpdateUserData将数据保存在服务器上(在playfab上)

这是获取用户数据的示例。

public void SaveDataToPlayfab()
{
    // --------------- AN EXAMPLE OF SCORE --------------- //
    //-1 equal level not passed
    var levelScore = new[] {56, 24, 12, -1};
    var scoreToString = JsonUtility.ToJson(levelScore);

    // --------------- CREATING THE REQUEST --------------- //
    var yourData = new Dictionary<string, string>();
    //add the score in the dictionary
    yourData["LevelScore"] = scoreToString;

    var request = new UpdateUserDataRequest() { Data = yourData };

    // --------------- SEND THE COMMAND --------------- //
    //send the data to playfab
    PlayFabClientAPI.UpdateUserData(request, successCallback => Debug.Log("Success"), _ => Debug.Log("Error"));
}

处理数据时,您很可能会使用Json序列化,因此this question可能会有用。

您仍然需要实现登录系统(请参见Login Best Practiceslogin tutorial),因为需要记录客户端以发送保存/加载数据的请求。

这只是基础,但这也许就是您所需要的,取决于主要目标。

如评论中所述,您不会对此授予任何权限。因此,稍后,您可能需要执行检查以避免客户端发送非合法命令。

最后,Playfab还为virtual currencies和商业内置了逻辑,因此您可以使用AddUserVirtualCurrency方法轻松地更改货币。

此方法显示了如何更改货币。

public void AddCoins(int amount)
{
    // --------------- AN EXAMPLE OF SCORE --------------- //
    //VirtualCurrency is the name of the currency
    var request = new AddUserVirtualCurrencyRequest() { VirtualCurrency = "Coin", Amount = amount };

    // --------------- SEND THE COMMAND --------------- //
    PlayFabClientAPI.AddUserVirtualCurrency(request, successCallback => Debug.Log("Success"), _ => Debug.Log("Error"));
}

其他链接: Getting started with Playfab on Unity
Playfab Unity Tutorials
Using Player Data on Playfab

注意:Playfab只是我最喜欢的选择。您可以使用任何其他类型的服务(例如Amazon Dynamodb,firebase实时数据库或游戏火花)。自己执行此操作可能会很有挑战性,因此我建议从服务开始。了解服务器保存系统背后的思想后,您可以(如果仍然需要)将所有逻辑移到您自己的服务器上。

答案 1 :(得分:0)

如果您在Unity中工作并定位到Android和iOS,则还可以研究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的Game Center)。您可以使用Google Play游戏登录来绑定现有的作品,也可以使用众多不同的身份验证提供者之一。

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