UI の追加 - フレンドとプレイ - (Unity モジュール)
注釈:本資料はAI技術を用いて翻訳されています。
メニューの内容
このモジュールは、Byte Wars の組み込み生成ボタンを使用して、既存のメニューに 2 つのボタンを追加します。
フレンドを招待ボタン
Friend Essentials モジュールからフレンドメニューを開くためのボタンです。ゲームは実行時にこのボタンをマッチロビーメニューに生成します。このボタンは以下のファイルで定義されています:
InviteFriendsButton: マッチロビーメニューからフレンドリストメニューにアクセスするためのボタン。- CS ファイル:
Assets/Resources/Modules/Play/PlayingWithFriends/Scripts/UI/InviteFriendsButton.cs - Prefab ファイル:
Assets/Resources/Modules/Play/PlayingWithFriends/Prefabs/InviteFriendsButton.prefab
- CS ファイル:
以下は、InviteFriendsButton プレハブによって制御されるボタンのプレビューです:

このボタンには、Byte Wars 統合に合わせた機能が含まれています。
- このボタンが使用するコンポーネントへの参照。
private Button button;
private CanvasGroup canvasGroup;
private void Awake()
{
button = GetComponent<Button>();
canvasGroup = GetComponent<CanvasGroup>();
// ...
}
- 開くフレンドメニューを取得するためのフレンドモジュールへの参照。
private ModuleModel friendModule;
private void Awake()
{
// ...
friendModule = TutorialModuleManager.Instance.GetModule(TutorialType.FriendsEssentials);
}
- プレイヤーが現在マッチ中で、そのマッチが「マッチ作成」である場合にのみこのボタンを表示するオーバーライド関数。
private void OnEnable()
{
// Only show button if the current session is a "Create Match" session.
InGameMode gameMode = GameData.GameModeSo.InGameMode;
bool isMatchSession = gameMode == InGameMode.CreateMatchElimination || gameMode == InGameMode.CreateMatchTeamDeathmatch;
canvasGroup.alpha = isMatchSession ? 1.0f : 0.0f;
canvasGroup.interactable = isMatchSession;
canvasGroup.blocksRaycasts = isMatchSession;
// Skip button binding if the current match is not a match session.
if (!isMatchSession)
{
return;
}
button?.onClick?.AddListener(OpenFriendMenu);
}
- フレンドメニューを開く関数。
private void OpenFriendMenu()
{
MenuManager.Instance.ChangeToMenu(friendModule.isStarterActive ? AssetEnum.FriendsMenu_Starter : AssetEnum.FriendsMenu);
}
セッションに招待ボタン
招待を送信するためのボタンです。ゲームは実行時にこのボタンを Friend Essentials モジュールのフレンド詳細メニューに生成します。このボタンは以下のファイルで定義されています:
InviteToSessionButton_Starter: マッチロビーメニューからフレンドリストメニューにアクセスするためのボタン。- CS ファイル:
Assets/Resources/Modules/Play/PlayingWithFriends/Scripts/UI/InviteToSessionButton_Starter.cs - Prefab ファイル:
Assets/Resources/Modules/Play/PlayingWithFriends/Prefabs/InviteToSessionButton_Starter.prefab
- CS ファイル:
以下は、InviteToSessionButton_Starter プレハブによって制御されるボタンのプレビューです:

このプレハブには、Byte Wars 統合に合わせた機能が含まれています。
- このボタンが使用するコンポーネントへの参照。
private Button button;
private CanvasGroup canvasGroup;
private void Awake()
{
// ...
canvasGroup = GetComponent<CanvasGroup>();
button = GetComponent<Button>();
}
- 後で設定するラッパーへの参照。
private PlayingWithFriendsWrapper_Starter playingWithFriendswrapper;
private void Awake()
{
playingWithFriendswrapper = TutorialModuleManager.Instance.GetModuleClass<PlayingWithFriendsWrapper_Starter>();
// ...
}
- プレイヤーが現在マッチ中の場合にのみこのボタンを表示するオーバーライド関数。
private void OnEnable()
{
// Only show if currently in game session.
bool isInGameSession = !GameData.ServerSessionID.IsNullOrEmpty();
canvasGroup.alpha = isInGameSession ? 1.0f : 0.0f;
canvasGroup.interactable = isInGameSession;
canvasGroup.blocksRaycasts = isInGameSession;
// Skip button binding if the current match is not a match session.
if (button == null)
{
return;
}
button?.onClick?.AddListener(InviteToSession);
}
- セッションに招待ボタンにバインドされた、フレンド招待をトリガーする関数。この関数には、フレンドの ID を取得するロジックが含まれています。生成されたボタンは常にフレンド詳細メニューに表示されるため、そのメニューインスタンスを直接取得します。この関数には、後で変更する
PlayingWithFriendsWrapper_Starterにアクセスするコードも含まれています:
private void InviteToSession()
{
// Get target player's ID.
string targetPlayerId = "";
FriendDetailsMenu friendDetailsMenu = MenuManager.Instance.GetCurrentMenu() as FriendDetailsMenu;
FriendDetailsMenu_Starter friendDetailsMenu_Starter = MenuManager.Instance.GetCurrentMenu() as FriendDetailsMenu_Starter;
if (friendDetailsMenu != null)
{
targetPlayerId = friendDetailsMenu.UserId;
}
else if (friendDetailsMenu_Starter != null)
{
targetPlayerId = friendDetailsMenu_Starter.UserId;
}
if (targetPlayerId.IsNullOrEmpty())
{
BytewarsLogger.LogWarning("Current menu is not friend details or friend details starter menu.");
return;
}
// ...
}
スターターモードを有効化する
このモジュールでは UI の変更は必要ありません。必要な UI 要素はすべて Byte Wars の生成ボタンによって処理されます。スターターモードを有効化するだけです。
-
プロジェクトをビルドし、Unity エディターで開きます。
-
Assets/Resources/Modules/Play/PlayingWithFriends/PlayingWithFriendsAssetConfig.assetファイルを開き、Is Starter Activeオプションをチェックします。 -
エディターでゲームをプレイし、Play Online > Create match > 任意のゲームモードを選択 > 任意のサーバータイプを選択します。マッチロビーに入ったら、Invite Friends ボタンをクリックし、フレンドエントリを選択します。Invite to Session ボタンが表示されます。この時点では、ボタンをクリックしてもまだアクションはトリガーされません。
リソース
- このチュートリアルセクションで使用されるファイルは、Unity Byte Wars GitHub リポジトリで入手できます。