unity-module-create-joinable-session-p2p-overview-adding-ui
注釈:本資料はAI技術を用いて翻訳されています。
AccelByte Gaming Services (AGS) SDK for Unity は WebGL での P2P をサポートしていません。このモジュールは WebGL ビルドでは使用できません。
メニューの内容
このセクションでは、ゲームセッションを作成および閲覧するための UI メニューを準備する方法を学びます。これらの UI は以下のクラスで定義されています:
-
CreateMatchSessionMenu: ゲームセッションを作成する前にゲームモードの選択を表示するために使用される C# クラスです。
- C# ファイル:
Assets/Resources/Modules/Play/MatchSessionEssentials/Scripts/UI/CreateMatchSessionMenu.cs - Prefab ファイル:
Assets/Resources/Modules/Play/MatchSessionEssentials/Prefabs/CreateMatchSessionMenu.prefab
- C# ファイル:
-
CreateMatchSessionServerTypeMenu: ゲームセッションを作成する前にサーバータイプの選択(専用サーバーまたはピアツーピア)を表示するために使用される C# クラスです。
- C# ファイル:
Assets/Resources/Modules/Play/MatchSessionEssentials/Scripts/UI/CreateMatchSessionServerTypeMenu.cs - Prefab ファイル:
Assets/Resources/Modules/Play/MatchSessionEssentials/Prefabs/CreateMatchSessionServerTypeMenu.prefab
- C# ファイル:
-
CreateMatchSessionP2PMenu_Starter: セッションの作成や参加など、ピアツーピアでのゲームセッション状態を表示するために使用される C# クラスです。
- C# ファイル:
Assets/Resources/Modules/Play/MatchSessionP2P/Scripts/UI/CreateMatchSessionP2PMenu_Starter.cs - Prefab ファイル:
Assets/Resources/Modules/Play/MatchSessionP2P/Prefabs/CreateMatchSessionP2PMenu_Starter.prefab
- C# ファイル:
-
BrowseMatchMenu: 参加可能なゲームセッションのリストを表示するために使用される C# クラスです。
- C# ファイル:
Assets/Resources/Modules/Play/MatchSessionEssentials/Scripts/UI/BrowseMatchMenu.cs - Prefab ファイル:
Assets/Resources/Modules/Play/MatchSessionEssentials/Prefabs/BrowseMatchMenu.prefab
- C# ファイル:
-
BrowseMatchEntry: 個々の参加可能なゲームセッションエントリを表示するために使用される C# クラスです。
- C# ファイル:
Assets/Resources/Modules/Play/MatchSessionEssentials/Scripts/UI/BrowseMatchEntry.cs - Prefab ファイル:
Assets/Resources/Modules/Play/MatchSessionEssentials/Prefabs/BrowseMatchEntry.prefab
- C# ファイル:
これらの UI がどのように構築されているかの詳細については、以下をご覧ください。
マッチセッション作成メニュー
以下は CreateMatchSessionMenu Prefab のプレビューです。この Prefab には、ゲームセッションを作成する前にゲームモードを選択するためのボタンが含まれています。

このメニューで使用されるコンポーネントは、CreateMatchSessionMenu クラスで定義されています。ゲームモードボタンのいずれかがクリックされると、選択されたゲームモードが SelectedGameMode プロパティに保存されます。
public static InGameMode SelectedGameMode { get; private set; }
[SerializeField] private Button eliminationButton;
[SerializeField] private Button teamDeathMatchButton;
[SerializeField] private Button backButton;
マッチセッションサーバータイプメニュー
以下は CreateMatchSessionServerTypeMenu Prefab のプレビューです。この Prefab には、ゲームセッションを作成する前にサーバータイプを選択するためのボタンが含まれています。

このメニューで使用されるコンポーネントは、CreateMatchSessionServerTypeMenu クラスで定義されています。サーバータイプボタンのいずれかがクリックされると、選択されたタイプに基づいて次のメニューが開きます。例えば、ピアツーピアボタンがクリックされると、CreateMatchSessionP2PMenu_Starter Prefab がインスタンス化されます。
[SerializeField] private Button dedicatedServerButton;
[SerializeField] private Button peerToPeerButton;
[SerializeField] private Button backButton;
マッチセッション P2P メニュー
CreateMatchSessionP2PMenu_Starter Prefab には、ゲームセッションの作成または参加状態に基づいて特定のメニューを表示するための状態スイッチャーが含まれています。メニュー状態を切り替えるために、CreateMatchSessionP2PMenu_Starter クラスで定義された以下のコンポーネントを使用します。
[SerializeField] private MatchSessionStateSwitcher stateSwitcher;
以下は、このメニューに含まれる状態のリストです。
-
マッチ作成状態
この状態は、ゲームセッションを作成するリクエストが送信されていることを示すメッセージを表示します。また、プロセスをキャンセルするためのボタンも表示されます。

-
マッチ参加状態
この状態は、ゲームセッションに参加するリクエストが送信されていることを示すメッセージを表示します。また、プロセスをキャンセルするためのボタンも表示されます。

-
マッチ退出状態
この状態は、ゲームセッションの作成または参加のリクエストがキャンセルされていることを示すメッセージを表示します。

-
エラー状態
この状態は、ゲームセッションプロセス中に発生したエラーメッセージを表示します。また、ゲームセッションの作成または参加を再試行するためのボタンも表示されます。

マッチ閲覧メニュー
以下は BrowseMatchMenu Prefab のプレビューです。この Prefab は、参加可能なゲームセッションのリストを表示します。

このメニューで使用されるコンポーネントは、BrowseMatchMenu クラスで定義されています。
[SerializeField] private AccelByteWarsWidgetSwitcher widgetSwitcher;
[SerializeField] private BrowseMatchEntry sessionEntryPrefab;
[SerializeField] private Transform sessionListPanel;
[SerializeField] private ScrollRect sessionListScrollRect;
[SerializeField] private GameObject listLoaderPanel;
[SerializeField] private Button refreshButton;
[SerializeField] private Button backButton;
メニューが表示されるか、更新ボタンがクリックされると、以下のデリゲートがトリガーされます。このデリゲートを使用して、このメニューに表示するゲームセッションをクエリします。
public static event BrowseMatchHandler OnBrowseP2PMatch = delegate { };
マッチ閲覧エントリ
以下は BrowseMatchEntry Prefab のプレビューです。この Prefab は、参加する個々のゲームセッションエントリを表示します。セッションオーナー、ゲームモード、サーバータイプ、セッション内のプレイヤー数などの情報が表示されます。

このメニューで使用されるコンポーネントは、BrowseMatchEntry クラスで定義されています。
[SerializeField] private AccelByteWarsAsyncImage sessionOwnerImage;
[SerializeField] private TMP_Text sessionOwnerText;
[SerializeField] private TMP_Text gameModeText;
[SerializeField] private TMP_Text serverTypeText;
[SerializeField] private TMP_Text memberCountText;
[SerializeField] private Button joinButton;
参加ボタンがクリックされると、以下のデリゲートがトリガーされます。このデリゲートを使用して、マッチ閲覧メニューから選択されたゲームセッションに参加するリクエストを送信します。
public static event JoinMatchHandler OnJoinP2PMatchButtonClicked = delegate { };
UI の準備
このセクションでは、ゲームセッション機能の統合を開始するために、前述のメニューを準備します。
-
CreateMatchSessionP2PMenu_Starterクラスを開き、以下の関数を作成します。後でこの関数を使用してゲームセッション作成リクエストを送信します。今のところ、以下のコードを追加してメニューをマッチ作成状態に切り替えます。private void CreateMatchSession()
{
stateSwitcher.SetState(MatchSessionMenuState.CreateMatch);
} -
CreateMatchSessionP2PMenu_Starterクラスを使用してゲームセッションに参加することもできます。そのため、参加するゲームセッション ID を保存するために、以下のヘルパー変数を宣言しましょう。private BrowseSessionModel sessionToJoin = null; -
次に、以下の新しい関数を作成します。後でこの関数を使用してゲームセッションに参加するリクエストを送信します。今のところ、以下のコードを追加してメニューをマッチ参加状態に切り替えます。
private void JoinMatchSession(string sessionId)
{
stateSwitcher.SetState(MatchSessionMenuState.JoinMatch);
} -
以下の新しい関数を作成します。後でこの関数を使用してゲームセッションから退出するリクエストを送信します。今のところ、以下のコードを追加してメニューをマッチ退出状態に切り替えます。
private void LeaveMatchSession(string sessionId)
{
stateSwitcher.SetState(MatchSessionMenuState.LeaveMatch);
} -
事前定義された
OnEnable()関数を以下のコードに置き換えて、メニューが表示されたときにゲームセッションを作成するか参加するかを判断します。また、再試行ボタンとキャンセルボタンを適宜再バインドします。private void OnEnable()
{
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);
}
} -
次に、事前定義された
Awake()関数を以下のコードに置き換えて、マッチ閲覧エントリから参加ボタンがクリックされたときのイベントをバインドします。private void Awake()
{
BrowseMatchEntry.OnJoinP2PMatchButtonClicked += async (BrowseSessionModel sessionModel) =>
{
if (await AccelByteWarsOnlineSession.OnValidateToJoinGameSession.Invoke(sessionModel.Session))
{
sessionToJoin = sessionModel;
MenuManager.Instance.ChangeToMenu(GetAssetEnum());
}
};
} -
事前定義された
OnDisable()関数を以下のコードに置き換えて、キャッシュをリセットします。private void OnDisable()
{
sessionToJoin = null;
} -
Unity エディタで、
Assets/Resources/Modules/Play/MatchSessionP2Pに移動し、MatchSessionP2PEssentialsAssetConfig.assetを開きます。Is Active と Is Starter Active の両方のチェックボックスをオンにして、モジュールがスターターモードでアクティブになっていることを確認します。 -
最後に、エディタでゲームをプレイします。Play Online > Create Match からメインメニューに移動し、任意のゲームモードを選択して、Peer to Peer ボタンをクリックできるはずです。その後、メニューはマッチ作成状態に切り替わります。後で、この動作を実際のゲームセッション作成および参加リクエストに置き換えます。
リソース
-
このチュートリアルで使用されているファイルは、Unity Byte Wars GitHub リポジトリで入手できます。
- Assets/Resources/Modules/Play/MatchSessionEssentials/Scripts/UI/CreateMatchSessionMenu.cs
- Assets/Resources/Modules/Play/MatchSessionEssentials/Prefabs/CreateMatchSessionMenu.prefab
- Assets/Resources/Modules/Play/MatchSessionEssentials/Scripts/UI/CreateMatchSessionServerTypeMenu.cs
- Assets/Resources/Modules/Play/MatchSessionEssentials/Prefabs/CreateMatchSessionServerTypeMenu.prefab
- Assets/Resources/Modules/Play/MatchSessionEssentials/Scripts/UI/BrowseMatchMenu.cs
- Assets/Resources/Modules/Play/MatchSessionEssentials/Prefabs/BrowseMatchMenu.prefab
- Assets/Resources/Modules/Play/MatchSessionEssentials/Scripts/UI/BrowseMatchEntry.cs
- Assets/Resources/Modules/Play/MatchSessionEssentials/Prefabs/BrowseMatchEntry.prefab
- Assets/Resources/Modules/Play/MatchSessionP2P/Scripts/UI/CreateMatchSessionP2PMenu_Starter.cs
- Assets/Resources/Modules/Play/MatchSessionP2P/Prefabs/CreateMatchSessionP2PMenu_Starter.prefab