我正尝试在线保存游戏数据,就像其他许多游戏一样。
我希望用户通过Facebook,Google或任何其他来源登录,然后应该在线存储用户的游戏进度,并且当用户重置游戏或错误地丢失设备数据时,他应该能够访问在线存储的数据可检索他的进度信息,例如硬币,宝石和解锁等级等。
我为此尝试了Google Play游戏服务,在其中找到了排行榜和成就,但没有找到保存用户游戏统计信息的方法。
我目前没有解决方案。
我希望在线存储数据,我的游戏用户应该可以在线同步数据。
答案 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 Practices和login 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中)。
我建议使用类似以下的结构:
用户列表:
您可以使用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调用来更新数据库,这将帮助您在脱机时或用户在设备之间切换时处理极端情况。