メインコンテンツまでスキップ

UI の追加 - フレンドとプレイ - (Unity モジュール)

Last updated on February 4, 2026

注釈:本資料は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

以下は、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

以下は、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 の生成ボタンによって処理されます。スターターモードを有効化するだけです。

  1. プロジェクトをビルドし、Unity エディターで開きます。

  2. Assets/Resources/Modules/Play/PlayingWithFriends/PlayingWithFriendsAssetConfig.asset ファイルを開き、Is Starter Active オプションをチェックします。

  3. エディターでゲームをプレイし、Play Online > Create match > 任意のゲームモードを選択 > 任意のサーバータイプを選択します。マッチロビーに入ったら、Invite Friends ボタンをクリックし、フレンドエントリを選択します。Invite to Session ボタンが表示されます。この時点では、ボタンをクリックしてもまだアクションはトリガーされません。

リソース