# 通过 Cloud Code C# 模块访问 Leaderboards

> Refer to code samples that access Leaderboards with Cloud Code C# Modules.

您可以使用 Cloud Code 通过 [Cloud Code C# 模块](/cloud-code/modules/overview.md)来访问 Leaderboards 功能。

以玩家调用 Cloud Code 模块为例。通过以下代码片段，可提交玩家的分数、检索分数条目（包括排名）并检索排行榜中的最高分。

C#:

```cs
using Microsoft.Extensions.DependencyInjection;
using Unity.Services.CloudCode.Apis;
using Unity.Services.CloudCode.Core;
using Unity.Services.Leaderboards.Model;

public class LeaderboardsExample
{
    [CloudCodeFunction("LeaderboardsExample")]
    public async Task<LeaderboardResult> LeaderboardsExampleAsync(
        IExecutionContext context,
        IGameApiClient apiClient,
        string leaderboardId,
        string playerId,
        int score)
    {
        string accessToken = context.AccessToken;
        Guid projectId = Guid.Parse(context.ProjectId);

        var addScoreResult = await apiClient.Leaderboards.AddLeaderboardPlayerScoreAsync(
            context, accessToken, projectId, leaderboardId, playerId, new LeaderboardScore(score));
        var getScoreResult = await apiClient.Leaderboards.GetLeaderboardPlayerScoreAsync(
            context, accessToken, projectId, leaderboardId, playerId);
        var getScoresResult = await apiClient.Leaderboards.GetLeaderboardScoresAsync(
            context, accessToken, projectId, leaderboardId);

        return new LeaderboardResult()
        {
            AddScoreResult = addScoreResult.StatusCode.ToString(),
            GetScoreResult = getScoreResult.Data,
            GetScoresResult = getScoresResult.Data
        };
    }
}

public class LeaderboardResult
{
    public string AddScoreResult { get; set; }
    public LeaderboardEntryWithUpdatedTime GetScoreResult { get; set; }
    public LeaderboardScoresPage GetScoresResult { get; set; }
}

public class ModuleConfig : ICloudCodeSetup
{
    public void Setup(ICloudCodeConfig config)
    {
        config.Dependencies.AddSingleton(GameApiClient.Create());
    }
}
```

通过 Cloud Code 也可以对玩家作用域终端进行管理级别的访问。这样，您可以更新多个玩家的分数或单个玩家（除调用 Cloud Code 模块的玩家之外）的分数。实现方法是将服务令牌（而非访问令牌）传递给 Cloud Code 模块。

C#:

```cs
public class LeaderboardsExample
{
    [CloudCodeFunction("LeaderboardsExample")]
    public async Task<LeaderboardResult> LeaderboardsExampleAsync(
        IExecutionContext context,
        IGameApiClient apiClient,
        string leaderboardId,
        string playerId,
        int score)
    {
        string serviceToken = context.ServiceToken;
        Guid projectId = Guid.Parse(context.ProjectId);

        var addScoreResult = await apiClient.Leaderboards.AddLeaderboardPlayerScoreAsync(
            context, serviceToken, projectId, leaderboardId, playerId, new LeaderboardScore(score));
        var getScoreResult = await apiClient.Leaderboards.GetLeaderboardPlayerScoreAsync(
            context, serviceToken, projectId, leaderboardId, playerId);
        var getScoresResult = await apiClient.Leaderboards.GetLeaderboardScoresAsync(
            context, serviceToken, projectId, leaderboardId);

        return new LeaderboardResult()
        {
            AddScoreResult = addScoreResult.StatusCode.ToString(),
            GetScoreResult = getScoreResult.Data,
            GetScoresResult = getScoresResult.Data
        };
    }
}
```

## 其他资源##additional-resources

* [Unity Dashboard（Unity 后台）](https://dashboard.unity3d.com/)
* [Cloud Code 文档](/cloud-code.md)
* [Unity Authentication](/authentication/.md)
