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

すべてをまとめる - パーティの概要 - (Unity モジュール)

Last updated on February 4, 2026

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

UI を接続してパーティメンバーの表示、脱退、招待送信、キック、昇格を行う

  1. PartyMenu_Starter クラスを開き、作成したパーティラッパーを参照するために以下の変数を宣言します。

    private PartyEssentialsWrapper_Starter partyWrapper;
  2. 次に、以下のコードを追加して DisplayParty() 関数を更新します。この関数はパーティの詳細を取得し、パーティメンバーのエントリを表示します。

    private void DisplayParty() 
    {
    if (!partyWrapper)
    {
    BytewarsLogger.LogWarning("Failed to display party. Party wrapper is null.");
    return;
    }

    // Abort if no user is logged-in.
    PlayerState currentUser = GameData.CachedPlayerState;
    if (currentUser == null)
    {
    BytewarsLogger.LogWarning("Failed to display party. There is no current user logged-in.");
    return;
    }

    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Loading);

    // Display party details.
    partyWrapper.GetPartyDetails((Result<PartyEssentialsModels.PartyDetailsModel> result) =>
    {
    // Clean old member list.
    memberEntryContainer.DestroyAllChildren();

    // Instantiate party members.
    if (!result.IsError)
    {
    foreach (AccountUserPlatformData memberInfo in result.Value.MemberUserInfos)
    {
    bool isLeader = memberInfo.UserId == result.Value.PartySession.leaderId;
    PartyMemberEntry memberEntry = Instantiate(memberEntryPrefab, memberEntryContainer);
    memberEntry.SetPartyMember(memberInfo, isLeader);
    }
    }
    /* If failed to get party details because the player is not in any party.
    * Then, display current logged-in player entry only.*/
    else if (!AccelByteWarsOnlineSession.IsInParty)
    {
    PartyMemberEntry memberEntry = Instantiate(memberEntryPrefab, memberEntryContainer);
    memberEntry.SetPartyMember(new AccountUserPlatformData
    {
    UserId = currentUser.PlayerId,
    DisplayName = currentUser.PlayerName,
    AvatarUrl = currentUser.AvatarUrl
    }, true);
    }
    // Else, display error message.
    else
    {
    widgetSwitcher.ErrorMessage = "Failed to load party. An error occurred.";
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
    return;
    }

    // Display empty entries to add a new party member.
    int maxMembers = PartyEssentialsModels.PartyMaxMembers;
    int maxEmptyEntries = Mathf.Clamp(maxMembers - memberEntryContainer.childCount, 0, maxMembers);
    for (int i = 0; i < maxEmptyEntries; i++)
    {
    PartyMemberEntry memberEntry = Instantiate(memberEntryPrefab, memberEntryContainer);
    memberEntry.ResetPartyMember();
    }

    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Not_Empty);
    });
    }
  3. 次に、以下のコードを追加して LeaveParty() 関数を更新します。この関数はパーティから脱退するリクエストを送信します。成功すると、この関数はパーティメニューを閉じます。

    private void LeaveParty() 
    {
    // If not in party, simply close the menu.
    if (AccelByteWarsOnlineSession.CachedParty == null)
    {
    backButton.onClick.Invoke();
    return;
    }

    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Loading);

    partyWrapper.LeaveParty((Result result) =>
    {
    if (result.IsError)
    {
    widgetSwitcher.ErrorMessage = "Failed to leave party. An error occurred.";
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
    return;
    }

    backButton.onClick.Invoke();
    });
    }
  4. 次に、事前定義された OnEnable() 関数で関数バインディングを更新します。この関数は、パーティメニューが表示されたときに、ラッパー、ボタンバインディングを初期化し、パーティ情報を表示します。

    private void OnEnable()
    {
    backButton.onClick.AddListener(MenuManager.Instance.OnBackPressed);
    leaveButton.onClick.AddListener(LeaveParty);
    widgetSwitcher.OnRetryButtonClicked += DisplayParty;

    partyWrapper = TutorialModuleManager.Instance.GetModuleClass<PartyEssentialsWrapper_Starter>();
    if (partyWrapper)
    {
    AccelByteWarsOnlineSession.OnPartySessionUpdated += DisplayParty;
    DisplayParty();
    }
    }
  5. 次に、パーティメニューが閉じられたときに関数バインディングを解除します。以下のコードを OnDisable() 関数に追加します。

    private void OnDisable()
    {
    backButton.onClick.RemoveAllListeners();
    leaveButton.onClick.RemoveAllListeners();
    widgetSwitcher.OnRetryButtonClicked -= DisplayParty;

    if (partyWrapper)
    {
    AccelByteWarsOnlineSession.OnPartySessionUpdated -= DisplayParty;
    }
    }
  6. UI にパーティメンバーを表示するコードが完成しました。次に、パーティ関連のアクションを実行するためにいくつかの関数を呼び出す必要があります。PartyEssentialsWrapper_Starter クラスを開き、以下のコードをそれぞれの事前定義された関数に追加します。これにより、パーティアクションボタンがクリックされたときに、それぞれのパーティアクションが呼び出されます。これらのアクションボタンは、このモジュールのパーティメニューの追加チュートリアルで言及されている生成されたボタンです。

    public void OnInviteToPartyButtonClicked(string inviteeUserId)
    {
    SendPartyInvite(inviteeUserId);
    }
    public void OnKickPlayerFromPartyButtonClicked(string targetUserId)
    {
    KickPlayerFromParty(targetUserId);
    }
    public void OnPromotePartyLeaderButtonClicked(string targetUserId)
    {
    PromotePartyLeader(targetUserId);
    }

リソース