メインコンテンツまでスキップ

すべてを統合する - 全期間のリーダーボード - (Unreal Engine モジュール)

Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

リーダーボードランキングを表示するためにUIを接続する

  1. LeaderboardAllTimeWidget_Starter クラスの CPP ファイルを開き、GetRankings() 関数に移動して、現在のコードを以下のコードに置き換えます。これは LeaderboardSubsystem_Starter を使用してリーダーボードランキングを取得し、完了時に表示します。

    void ULeaderboardAllTimeWidget_Starter::GetRankings()
    {
    FUniqueNetIdRepl PlayerNetId = GetOwningPlayer()->GetLocalPlayer()->GetPreferredUniqueNetId();
    if (!PlayerNetId.IsValid())
    {
    return;
    }

    Ws_Leaderboard->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Loading);

    LeaderboardSubsystem->GetRankings(
    GetOwningPlayer(),
    LeaderboardCode,
    ResultLimit,
    FOnGetLeaderboardRankingComplete::CreateWeakLambda(this, [this, PlayerNetId](bool bWasSuccessful, const TArray<ULeaderboardRank*> Rankings)
    {
    if (!bWasSuccessful)
    {
    Ws_Leaderboard->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Empty);
    return;
    }

    // Add rankings to the leaderboard ranking list.
    Lv_Leaderboard->SetListItems(Rankings);

    // Get the logged-in player's rank if it is not included in the leaderboard.
    const TArray<ULeaderboardRank*> FilteredRank = Rankings.FilterByPredicate([PlayerNetId](const ULeaderboardRank* Temp) { return Temp && Temp->UserId == PlayerNetId; });
    const ULeaderboardRank* PlayerRank = FilteredRank.IsEmpty() ? nullptr : FilteredRank[0];
    if (!PlayerRank)
    {
    GetPlayerRanking();
    }
    // Display the rankings if it is not empty.
    else
    {
    DisplayPlayerRank(PlayerRank);
    Ws_Leaderboard->SetWidgetState(
    Lv_Leaderboard->GetNumItems() <= 0 ?
    EAccelByteWarsWidgetSwitcherState::Empty :
    EAccelByteWarsWidgetSwitcherState::Not_Empty);
    }
    }
    ));
    }
  2. GetPlayerRanking() に移動し、現在のコードを以下のコードに置き換えます。これは、現在ログインしているプレイヤーが GetRankings() 関数によって取得されたランキングに含まれていない場合にのみ呼び出されます。

    void ULeaderboardAllTimeWidget_Starter::GetPlayerRanking()
    {
    LeaderboardSubsystem->GetPlayerRanking(
    GetOwningPlayer(),
    LeaderboardCode,
    FOnGetLeaderboardRankingComplete::CreateWeakLambda(this, [this](bool bWasSuccessful, const TArray<ULeaderboardRank*> Rankings)
    {
    // Get and display the logged-in player's rank.
    DisplayPlayerRank((!bWasSuccessful || Rankings.IsEmpty()) ? nullptr : Rankings[0]);

    // Display the rankings if it is not empty.
    Ws_Leaderboard->SetWidgetState(
    Lv_Leaderboard->GetNumItems() <= 0 ?
    EAccelByteWarsWidgetSwitcherState::Empty :
    EAccelByteWarsWidgetSwitcherState::Not_Empty);
    }
    ));
    }
  3. NativeOnActivated() を以下のコードに置き換えて変更します。このコードでは、Admin Portal で設定した内容に基づいてリーダーボードコードを渡します。

    void ULeaderboardAllTimeWidget_Starter::NativeOnActivated()
    {
    // Set leaderboard code based on board-unreal-highestscore-{gamemode} format.
    LeaderboardCode = FString::Printf(TEXT("board-unreal-highestscore-%s"), *ULeaderboardsWidget::GetLeaderboardGameMode());

    if (FFTUEDialogueModel* FTUELeaderboard = FFTUEDialogueModel::GetMetadataById("ftue_alltime_leaderboard", FTUEDialogues))
    {
    FTUELeaderboard->Button1.URLArguments[1].Argument = LeaderboardCode;
    }

    Super::NativeOnActivated();

    // Reset widgets.
    PlayerRankPanel->SetVisibility(ESlateVisibility::Collapsed);
    Ws_Leaderboard->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Empty);
    Lv_Leaderboard->ClearListItems();

    // Get leaderboard rankings.
    GetRankings();
    }

リソース