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

Unity Gaming Services Beta排行榜:替换Player ID为自定义玩家名的问题

解决Unity Gaming Services Beta版排行榜关联玩家自定义名称的问题

由于UGS排行榜Beta版默认仅存储玩家ID与分数,要展示自定义名称,需结合UGS身份认证与玩家数据服务实现关联,以下是具体方案:

1. 先完成玩家身份认证与名称存储

确保已集成UGS Authentication服务,玩家登录后(推荐匿名登录作为基础方式),使用UGS Player Data服务存储玩家自定义名称:

using Unity.Services.Authentication;
using Unity.Services.PlayerData;

public async void SavePlayerNickname(string nickname)
{
    // 确保玩家已登录
    if (!AuthenticationService.Instance.IsSignedIn)
    {
        await AuthenticationService.Instance.SignInAnonymouslyAsync();
    }
    // 存储自定义名称到玩家数据
    var data = new Dictionary<string, object> { { "PlayerNickname", nickname } };
    await PlayerDataService.Instance.SaveAsync(data);
}

2. 提交分数时绑定玩家身份

提交分数前必须确保玩家已完成登录,UGS排行榜会自动关联当前登录玩家的ID,无需额外手动绑定:

using Unity.Services.Ranking;

public async void SubmitPlayerScore(int score)
{
    if (!AuthenticationService.Instance.IsSignedIn)
    {
        await AuthenticationService.Instance.SignInAnonymouslyAsync();
    }
    // 提交分数到指定排行榜
    await RankingService.Instance.SubmitScoreAsync("your-leaderboard-id", score);
}

3. 获取排行榜数据并匹配玩家名称

拉取排行榜条目后,通过每个条目的PlayerId从Player Data服务中查询对应的自定义名称,再更新UI:

using Unity.Services.Ranking;

public async void LoadAndDisplayLeaderboard()
{
    try
    {
        // 获取排行榜前N条数据(这里取前20名)
        var leaderboardEntries = await RankingService.Instance.GetLeaderboardAsync("your-leaderboard-id", 20);
        
        foreach (var entry in leaderboardEntries)
        {
            // 查询当前条目的玩家名称
            var playerData = await PlayerDataService.Instance.LoadAsync(entry.PlayerId);
            string playerName = playerData.Data.TryGetValue("PlayerNickname", out var nameVal) 
                ? nameVal.ToString() 
                : "Anonymous Player";
            
            // 更新UI:使用entry.Rank(排名)、playerName(名称)、entry.Score(分数)
            // 示例:UpdateLeaderboardUI(entry.Rank, playerName, entry.Score);
        }
    }
    catch (System.Exception e)
    {
        Debug.LogError($"加载排行榜失败: {e.Message}");
    }
}

4. Beta版特殊处理注意事项

  • 开启UGS Dashboard中Player Data服务的公开数据访问权限,确保能读取其他玩家的名称数据;
  • Beta版API可能存在不稳定情况,所有异步操作必须添加异常捕获;
  • 若无需持久化名称,也可尝试提交分数时附带自定义元数据(需测试Beta版是否支持):
    var metadata = new Dictionary<string, object> { { "Nickname", playerCustomName } };
    await RankingService.Instance.SubmitScoreAsync("your-leaderboard-id", score, metadata);
    
    获取时直接从entry.Metadata["Nickname"]读取,无需额外调用Player Data服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:12:39