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

すべてを統合する - フレンドリストを表示する - (Unity モジュール)

Last updated on February 4, 2026

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

フレンドリストを取得するために UI を接続する

  1. FriendsMenu_Starter.cs を開き、FriendsEssentialsWrapper_Starter クラスをプライベート変数として宣言します。

    private FriendsEssentialsWrapper_Starter friendsEssentialsWrapper;
  2. 既存の LoadFriendList() 関数を以下のコードに置き換えて、FriendsEssentialsWrapper_Starter クラスから GetFriendList() 関数を呼び出します。これにより、バックエンドから実際のフレンドリストの取得がトリガーされます。

    private void LoadFriendList()
    {
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Loading);
    ClearFriendList();

    friendsEssentialsWrapper.GetFriendList(OnLoadFriendListCompleted);
    }
  3. 既存の OnLoadFriendListCompleted コールバック関数を以下のコードに置き換えて、結果を処理します。

    private void OnLoadFriendListCompleted(Result<Friends> result)
    {
    if (result.IsError)
    {
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
    return;
    }

    if (result.Value.friendsId.Length <= 0)
    {
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Empty);
    return;
    }

    GetBulkUserInfo(result.Value);
    }
  4. GetBulkUserInfo() という関数を作成して、フレンドIDのリストからユーザー情報を取得します。

    private void GetBulkUserInfo(Friends friends)
    {
    friendsEssentialsWrapper.GetBulkUserInfo(friends.friendsId, OnGetBulkUserInfoCompleted);
    }
  5. OnGetBulkUserInfoCompleted() というコールバック関数を作成して、結果を処理します。

    private void OnGetBulkUserInfoCompleted(Result<AccountUserPlatformInfosResponse> result)
    {
    if (result.IsError)
    {
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
    return;
    }

    ClearFriendList();
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Not_Empty);

    PopulateFriendList(result.Value.Data);
    }
  6. PopulateFriendList() という関数を作成して、フレンドリストを入力します。

    private void PopulateFriendList(params AccountUserPlatformData[] userInfo)
    {
    foreach (AccountUserPlatformData baseUserInfo in userInfo)
    {
    CreateFriendEntry(baseUserInfo.UserId, AccelByteWarsOnlineUtility.GetDisplayName(baseUserInfo));
    }
    }
  7. CreateFriendEntry() という関数を作成して、各フレンドのフレンドエントリを作成します。フレンドの表示名が空の場合、この関数はユーザーIDの最初の5文字を表示名として使用します。

    private void CreateFriendEntry(string userId, string displayName)
    {
    GameObject playerEntry = InstantiateToColumn(friendEntryPrefab);
    playerEntry.name = userId;

    FriendEntry playerEntryHandler = playerEntry.GetComponent<FriendEntry>();
    playerEntryHandler.EntryView = FriendEntry.FriendEntryView.Default;
    playerEntryHandler.UserId = userId;
    playerEntryHandler.FriendName.text = displayName;

    friendEntries.Add(userId, playerEntry);
    }
  8. 既存の OnEnable() 関数を以下のコードに置き換えて、friendsEssentialsWrapper 変数を初期化し、LoadFriendList() 関数を呼び出します。

    private void OnEnable()
    {
    if (friendsEssentialsWrapper == null)
    {
    friendsEssentialsWrapper = TutorialModuleManager.Instance.GetModuleClass<FriendsEssentialsWrapper_Starter>();
    }

    if (friendsEssentialsWrapper == null)
    {
    BytewarsLogger.LogWarning("FriendsEssentialsWrapper_Starter is not enabled");
    return;
    }

    LoadFriendList();
    }

フレンドのアバターを表示するためにUIを接続する

  1. FriendsMenu_Starter.cs を開き、RetrieveUserAvatar() という関数を作成して、ユーザーアバターを取得します。

    private void RetrieveUserAvatar(string userId)
    {
    friendsEssentialsWrapper.GetUserAvatar(userId, result => OnGetAvatarCompleted(result, userId));
    }
  2. OnGetAvatarCompleted() というコールバック関数を作成して、結果を処理します。

    private void OnGetAvatarCompleted(Result<Texture2D> result, string userId)
    {
    if (result.IsError)
    {
    BytewarsLogger.LogWarning($"Unable to get avatar for user Id: {userId}, " +
    $"Error Code: {result.Error.Code}, " +
    $"Error Message: {result.Error.Message}");
    return;
    }

    if (result.Value == null || !friendEntries.TryGetValue(userId, out GameObject friendEntry))
    {
    return;
    }

    Image friendImage = friendEntry.GetComponent<FriendEntry>().FriendImage;
    Rect imageRect = new Rect(0f, 0f, result.Value.width, result.Value.height);
    friendImage.sprite = Sprite.Create(result.Value, imageRect, Vector2.zero);
    }
  3. CreateFriendEntry() 関数を更新して、RetrieveUserAvatar() 関数を呼び出します。以下のコードを追加します:

    private void CreateFriendEntry(string userId, string displayName)
    {
    //...
    friendEntries.Add(userId, playerEntry);

    RetrieveUserAvatar(userId);
    }

エントリをフレンド詳細メニューに接続する

  1. FriendsMenu_Starter.cs を開き、OnFriendEntryClicked() という関数を作成して、フレンドエントリのクリックイベントを処理します。この関数は、フレンド詳細メニューキャンバスをインスタンス化し、ユーザー情報を渡し、メニューをフレンド詳細メニューに変更します。

    private void OnFriendEntryClicked(string userId, string displayName, FriendEntry playerEntryHandler)
    {
    if (friendDetailsAssetEnum is AssetEnum.FriendDetailsMenu_Starter)
    {
    MenuManager.Instance.InstantiateCanvas(friendDetailsAssetEnum);
    }

    if (!MenuManager.Instance.AllMenu.TryGetValue(friendDetailsAssetEnum, out MenuCanvas menuCanvas))
    {
    BytewarsLogger.LogWarning($"Unable to find {friendDetailsAssetEnum} in menu manager");
    return;
    }

    if (menuCanvas.gameObject.TryGetComponent(out FriendDetailsMenu_Starter friendDetailMenu))
    {
    friendDetailMenu.UserId = userId;
    friendDetailMenu.FriendImage.sprite = playerEntryHandler.FriendImage.sprite;
    friendDetailMenu.FriendDisplayName.text = displayName;
    }

    MenuManager.Instance.ChangeToMenu(friendDetailsAssetEnum);
    }
  2. CreateFriendEntry() 関数を更新して、フレンドエントリにイベントリスナーを追加し、OnFriendEntryClicked() 関数を呼び出します。以下のコードを追加します。

    private void CreateFriendEntry(string userId, string displayName)
    {
    //...
    playerEntryHandler.FriendName.text = displayName;

    Button friendButton = playerEntry.GetComponent<Button>();
    friendButton.onClick.AddListener(() => OnFriendEntryClicked(userId, displayName, playerEntryHandler));

    friendEntries.Add(userId, playerEntry);
    //...
    }

UIをフレンドアクションイベントに接続する

このセクションでは、フレンドを追加する および フレンドを管理する モジュールで使用した静的アクションイベントを使用します。これらのモジュールを完了していない場合、またはこれらのモジュールを完了する予定がない場合は、リアルタイムのフレンドリスト更新機能のみが失われます。

  1. FriendsMenu_Starter.cs を開き、OnFriendListUpdate() という関数を作成します。これにより、LoadFriendList() 関数がトリガーされ、現在表示されているリストが更新されます。

    private void OnFriendListUpdate(string userId)
    {
    if (!gameObject.activeSelf)
    {
    return;
    }

    LoadFriendList();
    }
  2. Awake() 関数を更新して、ラッパー内のアクションイベントを OnFriendListUpdate() 関数にバインドします。以下のコードを追加します:

    private void Awake()
    {
    //...
    backButton.onClick.AddListener(MenuManager.Instance.OnBackPressed);

    FriendsEssentialsModels.OnRequestAccepted += OnFriendListUpdate;
    ManagingFriendsModels.OnPlayerUnfriended += OnFriendListUpdate;
    ManagingFriendsModels.OnPlayerBlocked += OnFriendListUpdate;
    //...
    }
  3. OnDestroy() 関数を以下のコードに置き換えて、UIが破棄されたときにこれらのイベントをアンバインドします。

    private void OnDestroy()
    {
    FriendsEssentialsModels.OnRequestAccepted -= OnFriendListUpdate;
    ManagingFriendsModels.OnPlayerUnfriended -= OnFriendListUpdate;
    ManagingFriendsModels.OnPlayerBlocked -= OnFriendListUpdate;
    }

フレンド詳細を表示するためにUIを接続する

  1. FriendDetailsMenu_Starter.cs を開き、以下のコードを追加してモジュールラッパーを宣言します:

    private FriendsEssentialsWrapper friendsEssentialsWrapper;
  2. OnEnable() 関数を更新して、モジュールラッパーを定義します。以下のコードを追加します。

    private void OnEnable()
    {
    if (friendsEssentialsWrapper == null)
    {
    friendsEssentialsWrapper = TutorialModuleManager.Instance.GetModuleClass<FriendsEssentialsWrapper>();
    }

    if (friendsEssentialsWrapper != null && !string.IsNullOrEmpty(UserId))
    {
    friendsEssentialsWrapper.GetFriendshipStatus(UserId, OnGetFriendshipStatusCompleted);
    }

    DisableAllButtons();
    }
  3. Awake() を更新して、受信/リクエストのライフサイクルイベントを接続し、登録された関数を宣言します。

    private void Awake()
    {
    ...
    InitializePartyButtons();

    FriendsEssentialsModels.OnIncomingRequest += OnIncomingRequest;
    FriendsEssentialsModels.OnRequestAccepted += OnRequestAccepted;
    FriendsEssentialsModels.OnRequestCanceled += OnRequestCanceled;
    FriendsEssentialsModels.OnRequestRejected += OnRequestRejected;
    }

    private void OnRequestRejected (string userId)
    {
    if (!gameObject.activeSelf || userId != UserId)
    {
    return;
    }

    addFriendButton.gameObject.SetActive(true);
    cancelButton.gameObject.SetActive(false);
    }
    private void OnRequestCanceled (string userId)
    {
    if (!gameObject.activeSelf || userId != UserId)
    {
    return;
    }
    addFriendButton.gameObject.SetActive(true);
    acceptButton.gameObject.SetActive(false);
    rejectButton.gameObject.SetActive(false);
    }
    private void OnIncomingRequest (string userId)
    {
    if (!gameObject.activeSelf || userId != UserId)
    {
    return;
    }
    acceptButton.gameObject.SetActive(true);
    rejectButton.gameObject.SetActive(true);
    addFriendButton.gameObject.SetActive(false);
    }
    private void OnRequestAccepted (string userId)
    {
    if (!gameObject.activeSelf || userId != UserId)
    {
    return;
    }
    unfriendButton.gameObject.SetActive(true);
    cancelButton.gameObject.SetActive(false);
    }

フレンドリクエストを送信するためにUIを接続する

  1. Addfriend() 関数を更新して、プレイヤーにフレンドリクエストを送信できるようにします。既存の実装を以下のコードに置き換えます。

    private void AddFriend()
    {
    friendsEssentialsWrapper.SendFriendRequest(UserId, OnAddfriendCompleted);
    addFriendButton.gameObject.SetActive(false);
    }
  2. OnAddfriendCompleted() という新しい関数を作成して、結果を処理します。

    private void OnAddfriendCompleted(Result result)
    {
    if (result.IsError)
    {
    MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
    result.Error.Message, "OK", null);
    return;
    }

    BytewarsLogger.Log($"Successfully add player with user ID: {UserId}");

    MenuManager.Instance.PushNotification(new PushNotificationModel
    {
    Message = result.IsError ? FriendsEssentialsModels.DefaultSendFriendRequestErrorMessage : FriendsEssentialsModels.FriendRequestSentDetailsMessage
    });
    cancelButton.gameObject.SetActive(true);
    }

フレンドリクエストをキャンセルするためにUIを接続する

  1. CancelFriendRequest() 関数を更新して、フレンドリクエストをキャンセルします。既存の実装を以下のコードに置き換えます。

    private void CancelFriendRequest()
    {
    friendsEssentialsWrapper.CancelFriendRequests(UserId, OnFriendRequestCanceled);
    cancelButton.gameObject.SetActive(false);
    }
  2. OnFriendRequestCanceled() という新しい関数を作成して、結果を処理します。

    private void OnFriendRequestCanceled (Result result)
    {
    if (result.IsError)
    {
    MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
    result.Error.Message, "OK", null);
    return;
    }

    BytewarsLogger.Log($"Successfully canceled friend request with user ID: {UserId}");

    MenuManager.Instance.PushNotification(new PushNotificationModel
    {
    Message = result.IsError ? FriendsEssentialsModels.ErrorStatusMessage : FriendsEssentialsModels.FriendRequestCanceledMessage
    });

    addFriendButton.gameObject.SetActive(true);
    }

フレンドリクエストを承認するためにUIを接続する

  1. AcceptFriendRequest() 関数を更新して、フレンドリクエストを承認します。既存の実装を以下のコードに置き換えます。

    private void AcceptFriendRequest()
    {
    friendsEssentialsWrapper.AcceptFriend(UserId, OnAcceptFriendCompleted);
    acceptButton.gameObject.SetActive(false);
    rejectButton.gameObject.SetActive(false);
    }
  2. OnAcceptFriendCompleted() という新しい関数を作成して、結果を処理します。

    private void OnAcceptFriendCompleted (Result result)
    {
    if (result.IsError)
    {
    MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
    result.Error.Message, "OK", null);
    return;
    }

    BytewarsLogger.Log($"Successfully accepted friend request with user ID: {UserId}");

    MenuManager.Instance.PushNotification(new PushNotificationModel
    {
    Message = result.IsError ? FriendsEssentialsModels.ErrorStatusMessage : FriendsEssentialsModels.FriendRequestAcceptedMessage
    });

    unfriendButton.gameObject.SetActive(true);
    }

フレンドリクエストを拒否するためにUIを接続する

  1. RejectFriendRequest() 関数を更新して、フレンドリクエストを拒否します。既存の実装を以下のコードに置き換えます。

    private void RejectFriendRequest()
    {
    friendsEssentialsWrapper.DeclineFriend(UserId, OnRejectFriendRequest);
    rejectButton.gameObject.SetActive(false);
    acceptButton.gameObject.SetActive(false);
    }
  2. OnRejectFriendRequest() という新しい関数を作成して、結果を処理します。

    private void OnRejectFriendRequest (Result result)
    {
    if (result.IsError)
    {
    MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
    result.Error.Message, "OK", null);
    return;
    }

    BytewarsLogger.Log($"Successfully accepted friend request with user ID: {UserId}");

    MenuManager.Instance.PushNotification(new PushNotificationModel
    {
    Message = result.IsError ? FriendsEssentialsModels.ErrorStatusMessage : FriendsEssentialsModels.FriendRequestRejectedMessage
    });

    addFriendButton.gameObject.SetActive(true);
    }

リソース