マッチセッションメニューの追加 - 専用サーバーで参加可能なセッションを作成する - (Unity モジュール)
注釈:本資料はAI技術を用いて翻訳されています。
メニューの内容
このセクションでは、ゲームセッションの作成と閲覧のための 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# ファイル:
-
CreateMatchSessionDSMenu_Starter: セッションの作成や参加など、専用サーバーを使用したゲームセッションの状態を表示するために使用される C# クラスです。
- C# ファイル:
Assets/Resources/Modules/Play/MatchSessionDS/Scripts/UI/CreateMatchSessionDSMenu_Starter.cs - Prefab ファイル:
Assets/Resources/Modules/Play/MatchSessionDS/Prefabs/CreateMatchSessionDSMenu_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 クラスで定義されています。サーバータイプボタンのいずれかがクリックされると、選択されたタイプに基づいて次のメニューが開きます。たとえば、専用サーバーボタンがクリックされると、CreateMatchSessionDSMenu_Starter Prefab がインスタンス化されます。
[SerializeField] private Button dedicatedServerButton;
[SerializeField] private Button peerToPeerButton;
[SerializeField] private Button backButton;
マッチセッション DS メニュー
CreateMatchSessionDSMenu_Starter Prefab には、ゲームセッションの作成または参加の状態に基づいて特定のメニューを表示するための状態スイッチャーが含まれています。メニューの状態を切り替えるには、CreateMatchSessionDSMenu_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 OnBrowseDSMatch = 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 OnJoinDSMatchButtonClicked = delegate { };
UI の準備
このセクションでは、ゲームセッション機能の統合を開始するために、前述のメニューを準備します。
-
CreateMatchSessionDSMenu_Starterクラスを開き、以下の関数を作成します。後でこの関数を使用してゲームセッション作成リクエストを送信します。今のところ、以下のコードを追加して、メニューをマッチ作成状態に切り替えます。private void CreateMatchSession()
{
stateSwitcher.SetState(MatchSessionMenuState.CreateMatch);
} -
ゲームセッションに参加するためにも
CreateMatchSessionDSMenu_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.OnJoinDSMatchButtonClicked += 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/MatchSessionDSに移動し、MatchSessionDSEssentialsAssetConfig.assetを開きます。Is Active と Is Starter Active の両方のチェックボックスをオンにして、モジュールがスターターモードでアクティブ化されていることを確認します。 -
最後に、エディターでゲームをプレイします。Play Online > Create Match からメインメニューに移動し、任意のゲームモードを選択して、Dedicated Server ボタンをクリックできるはずです。その後、メニューはマッチ作成状態に切り替わります。後で、この動作を実際のゲームセッションの作成と参加のリクエストに置き換えます。
リソース
-
このチュートリアルで使用されるファイルは、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/MatchSessionDS/Scripts/UI/CreateMatchSessionDSMenu_Starter.cs
- Assets/Resources/Modules/Play/MatchSessionDS/Prefabs/CreateMatchSessionDSMenu_Starter.prefab