すべてをまとめる - ピアツーピアで参加可能なセッションを作成 - (Unity モジュール)
注釈:本資料はAI技術を用いて翻訳されています。
AccelByte Gaming Services(AGS)SDK for Unity は WebGL で P2P をサポートしていません。このモジュールは WebGL ビルドでは使用できません。
マッチセッションを作成および参加するために UI を接続する
-
CreateMatchSessionP2PMenu_Starterクラスを開き、作成したラッパーを格納する変数を定義します。private MatchSessionP2PWrapper_Starter matchSessionP2PWrapper; -
以下のコードで
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);
} -
以下のコードで
JoinMatchSession()関数を置き換えます。この関数は、セッション ID によってゲームセッションに参加するリクエストを送信します。private void JoinMatchSession(string sessionId)
{
stateSwitcher.SetState(MatchSessionMenuState.JoinMatch);
matchSessionP2PWrapper.JoinGameSession(sessionId, OnJoinSessionComplete);
} -
ゲームセッションが作成または参加されたときにメニューを対応する状態に切り替えるコールバック関数を作成します。
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);
} -
以下のコードで
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);
} -
セッション離脱が完了したときに処理するコールバック関数を作成します。リクエストが失敗した場合は、エラー状態に切り替えます。それ以外の場合は、メニューを閉じて前のメニューに戻ります。
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();
} -
最後に、以下のコードで事前定義された
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);
}
}
リソース
-
このチュートリアルで使用されているファイルは、Unity Byte Wars GitHub リポジトリで入手できます。