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

OSS でフレンドリストのクエリを実行する - フレンドリスト - (Unreal Engine モジュール)

Last updated on February 4, 2026

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

スターターパックの内容

以前、FriendSubsystem_Starter サブシステムクラスにいくつかのフレンド機能を実装しました。このチュートリアルでは、引き続きそのクラスを使用します。

開始する前に、このチュートリアルで使用するいくつかのデリゲートが /Source/AccelByteWars/TutorialModules/Social/FriendsEssentials/FriendsEssentialsModels.h ファイルに用意されています。

  • フレンドリストの取得が完了したときのコールバックとして使用されるデリゲート。

    // ...
    DECLARE_DELEGATE_ThreeParams(FOnGetFriendListComplete, bool /*bWasSuccessful*/, TArray<UFriendData*> /*Friends*/, const FString& /*ErrorMessage*/);

フレンドリストの取得を実装する

このセクションでは、フレンドリストを取得する機能を実装します。

FriendsSubsystem_StarterCacheFriendList() という関数をすでに作成しており、これはフレンドリストを取得してキャッシュするために使用されます。そのキャッシュされたフレンドリストをフィルタリングして、フレンドリクエストを承認したプレイヤーのリストのみを取得する必要があります。

  1. FriendsSubsystem_Starter クラスのヘッダーファイルを開き、以下の関数宣言を作成します。

    public:
    // ...
    void GetFriendList(const APlayerController* PC, const FOnGetFriendListComplete& OnComplete = FOnGetFriendListComplete());
  2. 上記の関数の定義を作成します。FriendsSubsystem_Starter クラスの CPP ファイルを開き、以下のコードを追加します。これにより、キャッシュされたフレンドリストをフィルタリングして、承認されたフレンドリストのみを取得します。

    void UFriendsSubsystem_Starter::GetFriendList(const APlayerController* PC, const FOnGetFriendListComplete& OnComplete)
    {
    if (!ensure(FriendsInterface))
    {
    UE_LOG_FRIENDS_ESSENTIALS(Warning, TEXT("Cannot get friend list. Friends Interface is not valid."));
    return;
    }

    // Get accepted friend list from cache.
    const int32 LocalUserNum = GetLocalUserNumFromPlayerController(PC);
    GetCacheFriendList(LocalUserNum, true, FOnGetCacheFriendListComplete::CreateWeakLambda(this, [this, OnComplete](bool bWasSuccessful, TArray<TSharedRef<FOnlineFriend>>& CachedFriendList, const FString& ErrorMessage)
    {
    if (bWasSuccessful)
    {
    // Filter accepted friends.
    CachedFriendList = CachedFriendList.FilterByPredicate([](const TSharedRef<FOnlineFriend>& Friend)
    {
    return Friend->GetInviteStatus() == EInviteStatus::Accepted;
    });

    TArray<UFriendData*> AcceptedFriendList;
    for (const TSharedRef<FOnlineFriend>& TempData : CachedFriendList)
    {
    AcceptedFriendList.Add(UFriendData::ConvertToFriendData(TempData, this));
    }

    OnComplete.ExecuteIfBound(true, AcceptedFriendList, TEXT(""));
    }
    else
    {
    OnComplete.ExecuteIfBound(false, TArray<UFriendData*>(), ErrorMessage);
    }
    }));
    }

リソース