SDK でリーダーボードを実装する - 全期間のリーダーボード - (Unity モジュール)
注釈:本資料はAI技術を用いて翻訳されています。
ラッパーを開く
このチュートリアルでは、AccelByte Gaming Services (AGS) Software Development Kit (SDK) を使用してリーダーボードのランキングを取得する AGS リーダーボードの実装方法を学びます。Byte Wars には、LeaderboardEssentialsWrapper クラスで定義されたゲームインスタンスラッパーがあり、リーダーボードランキングを取得する完全な機能がすでに含まれています。このチュートリアルでは、LeaderboardEssentialsWrapper クラスのスターターバージョンである LeaderboardEssentialsWrapper_Starter ラッパーを使用して、機能をゼロから実装します。
スターターパックの内容
このチュートリアルを進めるには、LeaderboardEssentialsWrapper_Starter というスターターラッパークラスを使用します。このラッパーは以下のファイルで定義されています。
- C# ファイル:
Assets/Resources/Modules/Engagement/LeaderboardEssentials/Scripts/LeaderboardEssentialsWrapper_Starter.cs
また、ヘルパー定数変数と構造体を含むモデルクラスもあり、以下のファイルで定義されています。
- C# ファイル:
Assets/Resources/Modules/Engagement/LeaderboardEssentials/Scripts/LeaderboardEssentialsModels.cs
LeaderboardEssentialsWrapper_Starter クラスには、いくつかの事前定義されたコンポーネントが含まれています。
-
AGS SDK インターフェースを参照するヘルパー変数。これらの変数は、ラッパーが初期化されるときに割り当てられます。
private Leaderboard leaderboard;
private void Start()
{
leaderboard = AccelByteSDK.GetClientRegistry().GetApi().GetLeaderboard();
}
LeaderboardEssentialsModels クラスには、以下のヘルパーが含まれています。
-
UI メッセージ用の定数と、リーダーボードランキングを取得するリクエストを送信する際に使用されるクエリ制限:
public static readonly int QueryRankingsLimit = 10;
public static readonly string RankedMessage = "Your Rank";
public static readonly string UnrankedMessage = "You Are Unranked"; -
ゲームモードに基づいてリーダーボードコードを取得する関数。これらのコードは、Admin Portal で設定したリーダーボードコードと一致します。
public static string GetLeaderboardCodeByGameMode(InGameMode gameMode)
{
string gameModeSuffx = "unknown";
switch (gameMode)
{
case InGameMode.SinglePlayer:
case InGameMode.LocalElimination:
case InGameMode.LocalTeamDeathmatch:
gameModeSuffx = "singleplayer";
break;
case InGameMode.MatchmakingElimination:
case InGameMode.CreateMatchElimination:
gameModeSuffx = "elimination";
break;
case InGameMode.MatchmakingTeamDeathmatch:
case InGameMode.CreateMatchTeamDeathmatch:
gameModeSuffx = "teamdeathmatch";
break;
}
return $"board-unity-highestscore-{gameModeSuffx}";
}
リーダーボードランキングを取得する
このセクションでは、リーダーボードランキングを取得する機能を実装します。
-
LeaderboardEssentialsWrapper_Starterクラスを開き、指定されたリーダーボードコードに基づいてリーダーボードランキングのリクエストを送信する以下の関数を作成します。リクエストが完了すると、コールバック関数が呼び出されて結果を処理します。public void GetRankings(string leaderboardCode, ResultCallback<LeaderboardRankingResult> resultCallback, int offset = default, int limit = default)
{
BytewarsLogger.Log($"Get leaderboard {leaderboardCode} rankings.");
leaderboard.GetRankingsV3(
leaderboardCode,
result => OnGetRankingsCompleted(result, resultCallback),
offset,
limit
);
} -
次に、リクエストの結果を処理するコールバック関数を作成します。ここでは、リクエストのステータスをログに記録し、コールバックデリゲートを呼び出します。
private void OnGetRankingsCompleted(Result<LeaderboardRankingResult> result, ResultCallback<LeaderboardRankingResult> customCallback = null)
{
if (!result.IsError)
{
BytewarsLogger.Log("Get Rankings V3 successful.");
}
else
{
BytewarsLogger.LogWarning($"Get Rankings V3 failed. Message: {result.Error.Message}");
}
customCallback?.Invoke(result);
}
プレイヤーのリーダーボードランクを取得する
このセクションでは、特定のプレイヤーのリーダーボードランクを取得する機能を実装します。これは後で、現在ログインしているプレイヤーのリーダーボードランクを表示するために使用できます。
-
LeaderboardEssentialsWrapper_Starterクラスを開き、プレイヤーのユーザー ID を渡して特定のプレイヤーのリーダーボードランキングのリクエストを送信する以下の関数を作成します。完了すると、コールバック関数が呼び出されて結果を処理します。public void GetUserRanking(string userId, string leaderboardCode, ResultCallback<UserRankingDataV3> resultCallback)
{
BytewarsLogger.Log($"Get user {userId} ranking in leaderboard {leaderboardCode} rankings.");
leaderboard.GetUserRankingV3(
userId,
leaderboardCode,
result => OnGetUserRankingCompleted(result, resultCallback)
);
} -
次に、リクエスト結果を処理するコールバック関数を作成します。ここでは、リクエストのステータスをログに記録し、コールバックデリゲートを呼び出します。
private void OnGetUserRankingCompleted(Result<UserRankingDataV3> result, ResultCallback<UserRankingDataV3> customCallback)
{
if (!result.IsError)
{
BytewarsLogger.Log("Get User Ranking V3 successful.");
}
else
{
BytewarsLogger.LogWarning($"Get User Ranking V3 failed. Message: {result.Error.Message}");
}
customCallback?.Invoke(result);
}
リソース
-
このチュートリアルで使用されるファイルは、Unity Byte Wars GitHub リポジトリで入手できます。