如何在 Unity 中加载分数?

Posted

技术标签:

【中文标题】如何在 Unity 中加载分数?【英文标题】:How to load scores in Unity? 【发布时间】:2017-11-04 19:41:39 【问题描述】:

我在 Google Play 上发布了一个简单的游戏。当玩家赢得比赛时,他的分数应该在排行榜中增加。我的问题是当玩家赢得游戏时,应用程序停止。我认为问题出在PlayGamesPlatform.Instance.LoadScores,因为当我删除这部分时,没有人有问题。另外,我想注意到并不是每个玩家在游戏中都有这样的问题。这个问题只发生在那些从未赢得比赛的人身上(他们在排行榜上没有得分)。所以,PlayGamesPlatform.Instance.LoadScores 只适用于那些已经在排行榜上得分的人。

我的脚本:

PlayGamesPlatform.Instance.LoadScores(GPGSIds.leaderboard_rating, GooglePlayGames.BasicApi.LeaderboardStart.PlayerCentered, 1, GooglePlayGames.BasicApi.LeaderboardCollection.Public, GooglePlayGames.BasicApi.LeaderboardTimeSpan.AllTime, (GooglePlayGames.BasicApi.LeaderboardScoreData data) =>

    long score;
    if (long.TryParse(data.PlayerScore.formattedValue, out score))
        Social.ReportScore(score + 50, GPGSIds.leaderboard_rating, (bool success) =>  );
    else
        Social.ReportScore(50, GPGSIds.leaderboard_rating, (bool success) =>  );
);

【问题讨论】:

你可以尝试将所有玩家的分数设置为默认 0,以便尚未玩过的玩家可以调用 loadScores 吗? @noogui 谢谢。它帮助了我 吉!很高兴听到它对您有用。 【参考方案1】:

试试这个google sample from github

使用PlayGamesPlatform.LoadScores()

此方法直接使用 PlayGamesPlatform。这种方法在访问排行榜数据时提供了额外的灵活性和信息。

 PlayGamesPlatform.Instance.LoadScores(
            GPGSIds.leaderboard_leaders_in_smoketesting,
            LeaderboardStart.PlayerCentered,
            100,
            LeaderboardCollection.Public,
            LeaderboardTimeSpan.AllTime,
            (data) =>
            
                mStatus = "Leaderboard data valid: " + data.Valid;
                mStatus += "\n approx:" +data.ApproximateCount + " have " + data.Scores.Length;
            );

LoadScores() 的参数为:

leaderboardId 起始位置(最高分或以玩家为中心)行数 排行榜收集(社交或公共)时间跨度(每天、每周、 all-time) 回调接受 LeaderboardScoreData 对象。这 LeaderboardScoreData 类用于将信息返回给 加载分数时的调用者。成员是: 1.id - 排行榜id 2. Valid - 如果返回的数据有效(调用成功)则为true 3. Status - 的ResponseStatus 调用 4. ApproximateCount - 中的近似分数数 leaderboard 5. Title - 排行榜的标题 6. PlayerScore - 当前玩家的得分 7. Scores - 得分列表 8. PrevPageToken - 可用于调用 LoadMoreScores() 的令牌 获取上一页的分数。 9. NextPageToken - 一个可以 用于调用 LoadMoreScores() 获取下一页分数。

void GetNextPage(LeaderboardScoreData data)
    
        PlayGamesPlatform.Instance.LoadMoreScores(data.NextPageToken, 10,
            (results) =>
            
                mStatus = "Leaderboard data valid: " + data.Valid;
                mStatus += "\n approx:" +data.ApproximateCount + " have " + data.Scores.Length;
            );
    

附加参考How to get the user score value from Google Play Services Leaderboard。

附注:

尝试将所有玩家的分数设置为默认值 0,以便尚未玩过的玩家可以调用 loadScores。

【讨论】:

以上是关于如何在 Unity 中加载分数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在unity3d中加载大工程模型

以编程方式在图像中加载纹理并将边框设置为图像 Unity

原生 C/C++ 代码的 C++/CLI 包装器,无法在 Unity3D 中加载

场景在 Unity 中加载但无法加载场景 Android

无法在 Unity 编辑器中加载预制件

无法在 play-games-plugin-for-unity 中加载库 libgpg.so