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

すべてをまとめる - ピアツーピアで参加可能なセッションを作成 - (Unity モジュール)

Last updated on February 4, 2026

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

備考

AccelByte Gaming Services(AGS)SDK for Unity は WebGL で P2P をサポートしていません。このモジュールは WebGL ビルドでは使用できません。

マッチセッションを作成および参加するために UI を接続する

  1. CreateMatchSessionP2PMenu_Starter クラスを開き、作成したラッパーを格納する変数を定義します。

    private MatchSessionP2PWrapper_Starter matchSessionP2PWrapper;
  2. 以下のコードで CreateMatchSession() 関数を置き換えます。この関数は、選択されたゲームモードに基づいてセッションテンプレートを使用して新しいゲームセッションを作成するリクエストを送信します。セッションテンプレートは、AccelByteWarsOnlineSessionModels クラスの GetGameSessionRequestModel() を使用して取得されます。

    private void CreateMatchSession()
    {
    // Get the session template name from the game config.
    SessionV2GameSessionCreateRequest request =
    AccelByteWarsOnlineSessionModels.GetGameSessionRequestModel(CreateMatchSessionMenu.SelectedGameMode, GameSessionServerType.PeerToPeer);
    if (request == null)
    {
    BytewarsLogger.LogWarning("Failed to create match session. Session type is not supported.");
    stateSwitcher.ErrorMessage = InvalidSessionTypeMessage;
    stateSwitcher.SetState(MatchSessionMenuState.Error);
    return;
    }

    // Create a new match session.
    stateSwitcher.SetState(MatchSessionMenuState.CreateMatch);
    matchSessionP2PWrapper.CreateGameSession(request, OnJoinSessionComplete);
    }
  3. 以下のコードで JoinMatchSession() 関数を置き換えます。この関数は、セッション ID によってゲームセッションに参加するリクエストを送信します。

    private void JoinMatchSession(string sessionId)
    {
    stateSwitcher.SetState(MatchSessionMenuState.JoinMatch);
    matchSessionP2PWrapper.JoinGameSession(sessionId, OnJoinSessionComplete);
    }
  4. ゲームセッションが作成または参加されたときにメニューを対応する状態に切り替えるコールバック関数を作成します。

    private void OnJoinSessionComplete(Result<SessionV2GameSession> result)
    {
    // Abort if already attempt to cancel join the match.
    if (stateSwitcher.CurrentState is
    not (MatchSessionMenuState.CreateMatch or MatchSessionMenuState.JoinMatch))
    {
    return;
    }

    if (result.IsError)
    {
    stateSwitcher.ErrorMessage = result.Error.Message;
    stateSwitcher.SetState(MatchSessionMenuState.Error);
    return;
    }

    stateSwitcher.SetState(MatchSessionMenuState.JoinedMatch);
    }
  5. 以下のコードで LeaveMatchSession() 関数を置き換えます。この関数は、離脱する有効なセッションがあるかどうかを確認します。ない場合は、単にメニューを閉じて前のメニューに戻ります。

    private void LeaveMatchSession(string sessionId)
    {
    // Simply return from the menu if the session is empty.
    if (string.IsNullOrEmpty(sessionId))
    {
    MenuManager.Instance.OnBackPressed();
    return;
    }

    stateSwitcher.SetState(MatchSessionMenuState.LeaveMatch);
    matchSessionP2PWrapper.LeaveGameSession(sessionId, OnLeaveMatchSessionComplete);
    }
  6. セッション離脱が完了したときに処理するコールバック関数を作成します。リクエストが失敗した場合は、エラー状態に切り替えます。それ以外の場合は、メニューを閉じて前のメニューに戻ります。

    private void OnLeaveMatchSessionComplete(Result result)
    {
    if (result.IsError && result.Error.Code != ErrorCode.SessionIdNotFound)
    {
    stateSwitcher.ErrorMessage = result.Error.Message;
    stateSwitcher.SetState(MatchSessionMenuState.Error);
    return;
    }

    MenuManager.Instance.OnBackPressed();
    }
  7. 最後に、以下のコードで事前定義された OnEnable() 関数を置き換えます。このコードは、最初にラッパーを初期化し、メニューが表示されたときにゲームセッションを作成または参加するかを決定します。また、それに応じて再試行およびキャンセルボタンを再バインドします。

    private void OnEnable()
    {
    matchSessionP2PWrapper ??= TutorialModuleManager.Instance.GetModuleClass<MatchSessionP2PWrapper_Starter>();
    if (!matchSessionP2PWrapper)
    {
    return;
    }

    if (sessionToJoin == null)
    {
    stateSwitcher.OnRetryButtonClicked = CreateMatchSession;
    stateSwitcher.OnCancelButtonClicked = () => LeaveMatchSession(AccelByteWarsOnlineSession.CachedSession.id);
    CreateMatchSession();
    }
    else
    {
    stateSwitcher.OnRetryButtonClicked = () => JoinMatchSession(sessionToJoin.Session.id);
    stateSwitcher.OnCancelButtonClicked = () => LeaveMatchSession(sessionToJoin.Session.id);
    JoinMatchSession(sessionToJoin.Session.id);
    }
    }

リソース