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

すべてを統合する - フレンドを管理する - (Unity モジュール)

Last updated on February 4, 2026

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

ブロックされたプレイヤーを取得するために UI を接続する

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

    private ManagingFriendsWrapper_Starter managingFriendsWrapper;

    private FriendsEssentialsWrapper_Starter friendsEssentialsWrapper;
  2. 既存の LoadBlockedPlayers() 実装を以下のコードに置き換えて、ManagingFriendsWrapper_Starter クラスから GetBlockedPlayers() 関数を呼び出します。

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

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

    private void OnLoadBlockedPlayersCompleted(Result<BlockedList> result)
    {
    if (result.IsError)
    {
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);

    return;
    }

    BlockedData[] blockedData = result.Value.data;

    if (blockedData.Length <= 0)
    {
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Empty);

    return;
    }

    IEnumerable<string> blockedPlayerIds = blockedData.Select(player => player.blockedUserId);

    GetBulkUserInfo(blockedPlayerIds.ToArray());
    }
  4. GetBulkUserInfo() という関数を作成して、ブロックされたプレイヤーのユーザー情報を取得します。

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

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

    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Not_Empty);

    ClearBlockedPlayers();

    PopulateBlockedPlayers(result.Value.Data);
    }
  6. PopulateBlockedPlayers() という関数を作成して、ブロックされたプレイヤーのリストを入力します。

    private void PopulateBlockedPlayers(params AccountUserPlatformData[] userInfo)
    {
    foreach (AccountUserPlatformData baseUserInfo in userInfo)
    {
    CreatePlayerEntry(baseUserInfo.UserId, AccelByteWarsOnlineUtility.GetDisplayName(baseUserInfo));
    }
    }
  7. CreatePlayerEntry() という関数を作成して、ブロックされた各プレイヤーのプレイヤーエントリを作成します。プレイヤーに表示名がない場合、この関数はユーザーIDの最初の5文字を表示名として使用します。

    private void CreatePlayerEntry(string userId, string displayName)
    {
    GameObject playerEntry = Instantiate(playerEntryPrefab, resultContentPanel);
    playerEntry.name = userId;

    BlockedPlayerEntry playerEntryHandler = playerEntry.GetComponent<BlockedPlayerEntry>();
    playerEntryHandler.UserId = userId;
    playerEntryHandler.FriendName.text = displayName;

    blockedPlayers.Add(userId, playerEntry);
    }
  8. OnEnable() 関数を更新して、LoadBlockedPlayers() 関数を呼び出し、モジュールラッパーを定義します。既存の実装を以下のコードに置き換えます。

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

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

    if (managingFriendsWrapper != null && friendsEssentialsWrapper != null)
    {
    LoadBlockedPlayers();
    }
    }

ブロックされたプレイヤーのアバターを表示するためにUIを接続する

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

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

    private void OnGetAvatarCompleted(string userId, Result<Texture2D> result)
    {
    if (result.IsError)
    {
    return;
    }

    if (!blockedPlayers.TryGetValue(userId, out GameObject playerEntry))
    {
    return;
    }

    if (!playerEntry.TryGetComponent(out BlockedPlayerEntry playerEntryHandler))
    {
    return;
    }

    Rect rect = new Rect(0f, 0f, result.Value.width, result.Value.height);
    playerEntryHandler.FriendImage.sprite = Sprite.Create(result.Value, rect, Vector2.zero);
    }
  3. CreatePlayerEntry() 関数を更新して、RetrieveUserAvatar() 関数を呼び出します。以下の強調表示されたコードを追加します。

    private void CreatePlayerEntry(string userId, string displayName)
    {
    //...
    blockedPlayers.Add(userId, playerEntry);

    RetrieveUserAvatar(userId);
    }

プレイヤーのブロックを解除するためにUIを接続する

  1. BlockedPlayersMenu_Starter.cs を開き、UnblockPlayer() という関数を作成して、ユーザーIDでプレイヤーのブロックを解除します

    private void UnblockPlayer(string userId)
    {
    MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptConfirmTitle,
    FriendsEssentialsModels.UnblockPlayerConfirmationMessage,
    "Yes",
    confirmAction: () =>
    {
    MenuManager.Instance.PromptMenu.ShowLoadingPrompt(FriendsEssentialsModels.UnblockingPlayerMessage);

    managingFriendsWrapper.UnblockPlayer(userId, result => OnUnblockPlayerCompleted(userId, result));
    },
    "No", null);
    }
  2. OnUnblockPlayerCompleted() というコールバック関数を作成して、結果を処理します。この関数は、ブロック解除アクションを確認するためのプロンプトメニューを表示します。

    private void OnUnblockPlayerCompleted(string userId, Result<UnblockPlayerResponse> result)
    {
    if (result.IsError)
    {
    MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
    result.Error.Message, "OK", null);
    return;
    }

    MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptMessageTitle,
    FriendsEssentialsModels.UnblockPlayerCompletedMessage, "OK", null);

    LoadBlockedPlayers();
    }
  3. CreatePlayerEntry() 関数を更新して、ブロック解除ボタンがクリックされたときに UnblockPlayer() 関数を呼び出します。以下のコードを追加します。

    private void CreatePlayerEntry(string userId, string displayName)
    {
    //...
    playerEntryHandler.FriendName.text = displayName;
    playerEntryHandler.UnblockButton.onClick.AddListener(() => UnblockPlayer(userId));

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

プレイヤーをブロック、ブロック解除、フレンド解除するためにUIを接続する

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

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

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

    if (managingFriendsWrapper != null && !string.IsNullOrEmpty(UserId))
    {
    managingFriendsWrapper.GetBlockedPlayers(OnGetBlockedPlayers);
    }
    }
  3. OnGetBlockedPlayers() 関数を更新して、現在のユーザーIDの最新のブロックステータスを取得します。

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

    foreach (BlockedData blockedData in result.Value.data)
    {
    if (UserId.Equals(blockedData.blockedUserId))
    {
    EnableButtonByModule(unblockButton, TutorialType.ManagingFriends);
    return;
    }
    }
    EnableButtonByModule(blockButton, TutorialType.ManagingFriends);
    }
  4. Unfriend() 関数を更新して、ユーザーIDでプレイヤーのフレンド解除を有効にします。既存の実装を以下のコードに置き換えます。

    private void Unfriend()
    {
    managingFriendsWrapper.Unfriend(UserId, OnUnfriendCompleted);
    unfriendButton.gameObject.SetActive(false);
    }
  5. OnUnfriendCompleted() 関数を更新して、結果を処理します。既存の実装を以下のコードに置き換えます。

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

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

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

    addFriendButton.gameObject.SetActive(true);
    }
  6. BlockPlayer() を更新して、ユーザーIDでプレイヤーのブロックを有効にします。既存の実装を以下のコードに置き換えます。

    private void BlockPlayer()
    {
    managingFriendsWrapper.BlockPlayer(UserId, OnBlockPlayerCompleted);
    blockButton.gameObject.SetActive(false);
    }
  7. OnBlockPlayerCompleted() 関数を更新して、結果を処理します。既存の実装を以下のコードに置き換えます。

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

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

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

    unblockButton.gameObject.SetActive(true);
    }
  8. UnblockPlayer() を更新して、ユーザーIDでプレイヤーのブロック解除を有効にします。既存の実装を以下のコードに置き換えます。

    private void UnblockPlayer()
    {
    managingFriendsWrapper.UnblockPlayer(UserId, OnUnblockPlayerCompleted);
    unblockButton.gameObject.SetActive(false);
    }
  9. OnUnblockPlayerCompleted() 関数を更新して、結果を処理します。既存の実装を以下のコードに置き換えます。

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

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

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

    addFriendButton.gameObject.SetActive(true);
    blockButton.gameObject.SetActive(true);
    UpdatePartyButtons();
    }

リソース