You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Unity(C#)中通过Apple GameKit插件获取指定排行榜本地玩家分数

在Unity(C#)中通过Apple GameKit获取本地玩家指定排行榜分数的方法

前置准备

  • 确保已在Unity Package Manager中导入Apple GameKit插件(路径:Window > Package Manager > Apple > GameKit)
  • 在Unity Player Settings的iOS选项卡中:
    • 勾选Game Center选项
    • 在Game Center Leaderboards列表中添加你要访问的排行榜ID(需与Apple开发者后台配置一致)

核心代码实现

以下是完整的C#脚本示例,包含Game Center登录、排行榜加载及本地玩家分数获取逻辑:

using UnityEngine;
using UnityEngine.Apple.GameKit;

public class GameCenterScoreHandler : MonoBehaviour
{
    // 替换为你的目标排行榜ID
    private const string TargetLeaderboardId = "com.yourgame.leaderboard.highscore";

    void Awake()
    {
        // 初始化时自动尝试登录Game Center
        AuthenticateLocalPlayer();
    }

    /// <summary>
    /// 验证本地玩家的Game Center身份
    /// </summary>
    private void AuthenticateLocalPlayer()
    {
        GKLocalPlayer.Local.Authenticate((bool success, NSError error) =>
        {
            if (success)
            {
                Debug.Log("Game Center 登录成功");
                // 登录成功后立即获取分数
                GetLocalPlayerScore();
            }
            else
            {
                Debug.LogError($"Game Center 登录失败: {error?.LocalizedDescription ?? "未知错误"}");
            }
        });
    }

    /// <summary>
    /// 获取本地玩家在指定排行榜的分数
    /// </summary>
    private void GetLocalPlayerScore()
    {
        // 加载目标排行榜
        GKLeaderboard.LoadLeaderboard(TargetLeaderboardId, (GKLeaderboard leaderboard, NSError error) =>
        {
            if (error != null)
            {
                Debug.LogError($"加载排行榜失败: {error.LocalizedDescription}");
                return;
            }

            if (leaderboard == null)
            {
                Debug.LogError("未找到匹配ID的排行榜,请检查配置");
                return;
            }

            // 配置查询范围:仅本地玩家,所有时间范围
            leaderboard.PlayerScope = GKLeaderboardPlayerScope.LocalPlayer;
            leaderboard.TimeScope = GKLeaderboardTimeScope.AllTime;

            // 加载分数数据
            leaderboard.LoadScores((GKScore[] scores, NSError scoreError) =>
            {
                if (scoreError != null)
                {
                    Debug.LogError($"获取分数失败: {scoreError.LocalizedDescription}");
                    return;
                }

                if (scores != null && scores.Length > 0)
                {
                    // 转换为int类型分数
                    int localPlayerScore = (int)scores[0].Value;
                    Debug.Log($"本地玩家当前分数: {localPlayerScore}");
                    // 此处可将分数用于UI显示或游戏逻辑
                }
                else
                {
                    Debug.Log("本地玩家在该排行榜暂无记录");
                }
            });
        });
    }
}

关键说明

  • 排行榜ID替换:务必将TargetLeaderboardId替换为你在Apple开发者后台创建的真实排行榜ID
  • 查询范围调整:TimeScope可根据需求改为GKLeaderboardTimeScope.Today(今日)或GKLeaderboardTimeScope.Week(本周)
  • 错误处理:代码中包含了完整的错误捕获逻辑,方便调试排查问题
  • 权限验证:测试时需确保iOS设备已登录有效的Game Center账号,且游戏Bundle ID与开发者后台配置完全一致

内容的提问来源于stack exchange,提问作者Mario Rossi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:47:16