1

我对Google Play Services排行榜有一个问题,我已经被卡住好几天了。

我正在使用Unity游戏插件.

我正在尝试获取特定级别的用户等级。因此,我通过LoadScores函数加载Scores,这似乎很好。

问题似乎是,我在“LoadScores”函数中得到了正确的排名,但总体上获取用户等级无论实际的Userrank是什么,函数仍然返回rank=0。

我的猜测是,这毕竟是一个时间问题,排名是在LoadScores函数计算出要返回的正确排名之前返回的。

public int GetUserRank(字符串级别ID){int秩=0;string user=游戏平台。实例.localUser.id;字符串排行榜=ReturnLeaderboard(levelID);社交。LoadScores(排行榜,分数=>{if(分数.Length>0){调试。日志(“检索”+分数。长度+“分数”);//使用用户名筛选分数for(int i=0;i<scores.Length;i++){if(用户==分数[i].userID){秩=分数[i].秩;//这会打印出用户的实际排名,似乎很有效打印(“LoadScoresFunction:”+排名);断裂;}}}其他的调试。日志(“检索分数失败”);});//这里的排名总是0,无论上面LoadScores函数的结果如何打印(“PlayGamesController中的排名:”+排名);回报等级;}

我通过以下方式从其他脚本引用此函数:

int rank=游戏控制器。实例。获取用户等级(levelID);

非常感谢您的任何想法/提示。

谢谢!

1答案1

重置为默认值
1

听起来像负载分数欣喜若狂异步所以你回报等级;甚至在得到结果之前,它就一直存在0.

您可能需要使用回调来代替直接赋值:

public void GetUserRank(字符串级别ID,操作<int>onResult){var user=游戏平台。实例.localUser.id;var排行榜=ReturnLeaderboard(levelID);社交。LoadScores(排行榜,分数=>{if(分数.Length>0){调试。日志(“检索”+分数。长度+“分数”);//使用用户名过滤分数for(int i=0;i<scores.Length;i++){if(用户==分数[i].userID){var等级=分数[i].rank;//这会打印出用户的实际排名,似乎很有效打印(“LoadScoresFunction:”+排名);onResult?。调用(结果);断裂;}}}其他的调试。日志(“检索分数失败”);onResult?。调用(-1);});}

然后像使用回调方法一样使用它

private void OnReceivedResult(int秩){//用等级做某事}...游戏控制器。实例。GetUserRank(级别ID,OnReceivedResult);

或使用lambda表达式

游戏控制器。实例。GetUserRank(级别ID,等级=>{//用等级做某事});
0

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.