マッチメイキング後の UI - 専用サーバーでのクイックマッチ - (Unity モジュール)
注釈:本資料はAI技術を用いて翻訳されています。
このページにはアクションチュートリアルのステップはありません。これは Byte Wars がオンラインマルチプレイヤーをどのように処理するかについての情報ページです。
マッチロビーメニュー
このメニューは、プレイヤーが専用サーバーまたはピアツーピアホストのいずれかのゲームサーバーに正常に接続したときに表示されます。プレイヤーの表示名やアバターなど、チームとそのメンバーに関する情報が表示されます。この UI は以下のクラスで定義されています:
- C# ファイル:
Assets/Scripts/UI/MainMenu/MatchLobbyMenu.cs - Prefab ファイル:
Assets/Resources/Modules/MainMenu/MatchLobby/MatchLobbyMenuCanvas.prefab
以下はマッチロビーメニューのプレビューです。ここでは、チームとプレイヤーのエントリーを視覚化するために、いくつかの一時的なエントリーが追加されています。

上記のプレビューからわかるように、このメニューには 2 つの主要なボタンがあります。最初のボタンはゲームを開始し、プレイヤーをゲームプレイレベルに移動させます。もう 1 つはゲームサーバーを終了します。これらのボタンの宣言は MatchLobbyMenuCanvas クラスで確認できます。
[SerializeField] private Button startButton;
[SerializeField] private Button quitButton;
プレイヤーエントリーを生成するために、このメニューは以下の関数を使用します:
private void GenerateTeamEntries()
{
ulong clientNetworkId = NetworkManager.Singleton.LocalClientId;
Dictionary<ulong, PlayerState> playerStates = GameManager.Instance.ConnectedPlayerStates;
Dictionary<int, TeamState> teamStates = GameManager.Instance.ConnectedTeamStates;
teamEntryListPanel.DestroyAllChildren();
// Generate team and its member entries.
Dictionary<int, TeamEntry> teamEntries = new Dictionary<int, TeamEntry>();
foreach (KeyValuePair<ulong, PlayerState> kvp in playerStates.OrderBy(p => p.Value.TeamIndex))
{
PlayerState playerState = kvp.Value;
int playerTeamIndex = playerState.TeamIndex;
bool isCurrentPlayer = playerState.ClientNetworkId == clientNetworkId;
if (!teamStates.ContainsKey(playerTeamIndex))
{
BytewarsLogger.Log($"Cannot spawn player entry. Invalid team index: {playerTeamIndex}");
continue;
}
// Create the team entry if not yet.
if (!teamEntries.ContainsKey(playerTeamIndex))
{
TeamEntry teamEntry = Instantiate(teamEntryPrefab, Vector3.zero, Quaternion.identity, teamEntryListPanel);
teamEntry.Set(teamStates[playerTeamIndex]);
teamEntries.Add(playerTeamIndex, teamEntry);
}
RectTransform teamEntryContainer = (RectTransform)teamEntries[playerTeamIndex].transform;
RectTransform playerEntryContainer = teamEntries[playerTeamIndex].PlayerEntryContainer;
// Create the player entry.
PlayerEntry playerEntry = Instantiate(
playerEntryPrefab,
Vector3.zero,
Quaternion.identity,
playerEntryContainer);
playerEntry.Set(teamStates[playerTeamIndex], playerState, isCurrentPlayer);
LayoutRebuilder.ForceRebuildLayoutImmediate(playerEntryContainer);
LayoutRebuilder.ForceRebuildLayoutImmediate(teamEntryContainer);
}
LayoutRebuilder.ForceRebuildLayoutImmediate(teamEntryListPanel);
}
上記のコードからわかるように、エントリーを生成するために TeamEntry と PlayerEntry クラスをインスタンス化しています。これらのエントリーについて詳しく見ていきましょう。
チームエントリー
この UI エントリーは、チームに基づいてプレイヤー情報エントリーをグループ化するために使用されます。この UI は以下のクラスで定義されています:
- C# ファイル:
Assets/Scripts/UI/TeamEntry.cs - Prefab ファイル:
Assets/Prefabs/UI/TeamEntry.prefab
以下はチームエントリー UI のプレビューです。

プレイヤーエントリー
この UI エントリーは、プレイヤーの表示名やアバターなど、プレイヤー情報を表示するために使用されます。この UI は以下のクラスで定義されています:
- C# ファイル:
Assets/Scripts/UI/PlayerEntry.cs - Prefab ファイル:
Assets/Prefabs/UI/PlayerEntry.prefab
以下はプレイヤーエントリー UI のプレビューです。

ポーズメニュー
プレイヤーがゲームプレイレベルに入ると、ゲームを一時停止でき、ポーズメニューが表示されます。このメニューには、再開、リスタート、終了などのいくつかのボタンが表示されます。以下のクラスと Prefab で定義されています:
- C# ファイル:
Assets/Scripts/UI/PauseMenuCanvas.cs - Prefab ファイル:
Assets/Resources/Modules/MainMenu/GamePlay/PauseMenuCanvas.prefab
以下はポーズメニューのプレビューです:

このメニューで使用されるコンポーネントは PauseMenuCanvas クラスで定義されています:
[SerializeField] private Button resumeBtn;
[SerializeField] private Button restartBtn;
[SerializeField] private Button quitBtn;
ゲームオーバーメニュー
ゲームが終了すると、このメニューが表示され、勝者などのゲーム情報と、もう一度プレイするかゲームを終了するかのボタンが表示されます。このメニューは以下のクラスと Prefab で定義されています:
- C# ファイル:
Assets/Scripts/UI/Gameplay/GameOverMenuCanvas.cs - Prefab ファイル:
Assets/Resources/Modules/MainMenu/GamePlay/GameOverMenuCanvas.prefab
以下はゲームオーバーメニューのプレビューです:

このメニューで使用されるコンポーネントは PauseMenuCanvas クラスで定義されています:
[SerializeField] private TextMeshProUGUI winnerPlayerTextUI;
[SerializeField] private RectTransform leaderboardList;
[SerializeField] private LeaderboardEntryController leaderboardEntryPrefab;
[SerializeField] private Button playAgainBtn;
[SerializeField] private Button quitBtn;
リソース
-
このチュートリアルで使用されているファイルは、Unity Byte Wars GitHub リポジトリで入手できます。
- Assets/Scripts/UI/MainMenu/MatchLobbyMenu.cs
- Assets/Resources/Modules/MainMenu/MatchLobby/MatchLobbyMenuCanvas.prefab
- Assets/Scripts/UI/TeamEntry.cs
- Assets/Prefabs/UI/TeamEntry.prefab
- Assets/Scripts/UI/PlayerEntry.cs
- Assets/Prefabs/UI/PlayerEntry.prefab
- Assets/Scripts/UI/Gameplay/PauseMenuCanvas.cs
- Assets/Resources/Modules/MainMenu/GamePlay/PauseMenuCanvas.prefab
- Assets/Scripts/UI/Gameplay/GameOverMenuCanvas.cs
- Assets/Resources/Modules/MainMenu/GamePlay/GameOverMenuCanvas.prefab