> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# クロスネットワークマルチプレイヤーの実装例

> MOBA スタイルの XBOX タイトル向けのクロスネットワークマルチプレイヤー実装例。マッチメイキング、専用サーバー、チャット、XR-007 遵守について取り上げます。

このトピックでは、伝統的なマルチプレイヤーオンラインバトルアリーナ (MOBA) ゲームにおけるクロスネットワーク機能とフローを示すシナリオ例について説明します。1 つの可能な設計と実装パスを提示します。このトピックは [XR-007: クロスネットワークプレイ、データ使用、およびコンパニオンアプリのインタラクション](https://developer.microsoft.com/en-us/games/xbox/docs/gdk/xr007) をサポートします。

このシナリオ例では、タイトルは次のマルチプレイヤー機能をサポートしています。

| 機能           | 説明                                                                                                       |
| ------------ | -------------------------------------------------------------------------------------------------------- |
| カスタムマッチメイキング | タイトルはカスタムマッチメイキングサービスを実装します。このサービスは、まず (任意で) プレイヤーをチームにマッチングし、次にチームとプレイヤーを一緒にマッチングします。                   |
| 専用サーバー       | タイトルのすべてのゲームプレイは専用サーバー上で実行されます。すべてのトラフィック (チャットトラフィックを含む) もこれらのサーバーを経由してルーティングされます。                      |
| カスタムリーダーボード  | タイトルサービスは、プレイヤーの進行状況に関する詳細情報を含むカスタムリーダーボードを実装します。                                                        |
| 複数のゲームモードと設定 | タイトルは、co-op 対チームベースなど、複数のゲームモードをサポートします。プレイヤーは、これらのモードのマップ、ゲームサイズ、ルール、その他の設定を構成できます。                     |
| ゲーム内通貨       | タイトルは、購入可能な (プレミアム) ゲーム内通貨のあるゲーム内ストアを提供します。プレイヤーはこの通貨を使用してチームのパワーアップを購入できます。プレイヤーはキャラクター用の装飾アイテムも購入できます。 |
| DLC          | 購入可能なダウンロード可能コンテンツ (DLC) には、新しいマップと追加キャラクターが含まれます。                                                       |

## タイトルサービス

このシナリオ例におけるカスタムタイトルサービスの 1 つは、認証サービスです。この認証サービスは、XBOX Live (または他のマルチプレイヤーネットワーク) のアカウントをタイトル固有のプレイヤーアカウントとリンクするアカウントリンクに使用されます。プレイヤーが認証サービスに初めて接続すると、アカウントリンクがサイレントに実行され、新しいクロスネットワークプレイヤーアイデンティティが作成されます。

XBOX Live の場合、プレイヤーの XUID がタイトル固有のアカウントにリンクされる一意のプレイヤー識別子として使用されます。XUID アクセスは使用前に承認される必要があり、開発者アカウントマネージャー (DAM) と協議する必要があります。タイトル固有のアカウントには、ネットワーク元と保存されたプレイヤーメタデータに関係なくすべてのタイトルサービスがプレイヤーを処理できるグローバル一意識別子 (GUID) があります。このシナリオ例では、マルチプレイヤーネットワークと基本的なゲームプレイのプレイヤー統計がこのアカウントに保存されます。

<Note>タイトルサービスは、タイトル固有のアカウント内のマルチプレイヤーネットワーク情報を使用して、マルチプレイヤー機能を XBOX Live プレイヤーのみに制限できるようにします。</Note>

## タイトルフロー

典型的なマルチプレイヤーゲームでは、クロスネットワーク機能の準拠フローはプレイヤーがマルチプレイヤーモードに入るときに開始されます。このシナリオ例では、タイトルは次の手順を実行します。

1. 権限の検証。

   マルチプレイヤーセッションを開始する前に、タイトルはマルチプレイヤー権限 (254 および 189) を検証します。権限が拒否された場合、タイトルはマルチプレイヤーモードに入りません。タイトルはコミュニケーション権限 (252) もチェックし、それに応じて音声およびテキストチャットを終了または無効にする必要があります。

2. クロスネットワーク権限の検証。

   このシナリオ例では、タイトルはデフォルトのマッチメイキング体験にクロスネットワークゲームプレイを統合しています。プレイヤーがマッチメイキング体験に入ると、タイトルはクロスネットワークプレイ権限 (185) を検証します。権限が拒否された場合、XBOX Live 内でのマッチメイキングのみが可能になります。プレイヤーが初めてクロスネットワークゲームプレイに配置されるとき、タイトルはクロスネットワークゲームプレイがアクティブであることを通知します。

3. チームマッチメイキング。

   タイトルのマッチメイキングサービスは、マッチメイキングルールに基づいて、クロスネットワークプレイヤーからチームを形成します。

4. チームまたはロビーの Multiplayer Session Directory (MPSD) セッションを作成して参加します。

   タイトルマッチメイキングサービスは、XBOX Live へのサービス間呼び出しを通じて Multiplayer Session Directory (MPSD) ロビーセッションを作成します。すべての XBOX Live プレイヤーがこのロビーセッションに参加します。サービスはカスタムプロパティを使用して、XBOX Live を使用していないセッション内のプレイヤーに関するヒントを追加提供します。これらのヒントは、次の手順でセッション状態を設定するためにクライアントロジックで使用できます。

5. チームまたはロビーの MPSD セッションを設定します。

   XBOX Live クライアントはロビーセッションをアクティビティセッションとして設定します。セッションの参加可能性と closed 状態は、クロスネットワークプレイヤーの状態に応じて設定する必要があります。XBOX Live プレイヤーは、クロスネットワークチームに残っている限りこのセッションにとどまります。セッションが満員 (またはフローで後に満員になる) の場合、サービスまたはロビーアービターはセッションを closed に設定する必要があります。プレイヤースロットが残っていないアクティビティセッションは、決して参加可能であってはなりません。

6. チームロビー。

   チームロビーでは、XBOX Live プレイヤーと他のマルチプレイヤープラットフォームのプレイヤーの両方が存在します。カスタムタイトルサービスを通じて、XBOX Live プレイヤー間で音声チャットが有効化されます。すべてのプレイヤー (XBOX Live/XBOX Live および XBOX Live/XBOX Live を使用していないユーザー) 間の音声チャットは、必要なすべてのプライバシーおよびパーミッションチェックを検証した後にのみ有効化されます。XBOX Live を使用しないフレンド関係については、タイトルは XBOX Live を使用しないフレンドのネットワークフレンド関係データを使用します。チームロビーでは、XBOX Live プレイヤーと XBOX Live を使用しないプレイヤーはタイトルアカウントのアイデンティティによって一意に識別されます。すべてのプレイヤー識別子には、ゲーマータグや他のマルチプレイヤーネットワーク用の同等のプレイヤー名も表示されます。

   次のスクリーンショットは、ロビー内のプレイヤーロースター UI の例を示しています。

   <img src="https://mintcdn.com/microsoft-4404708b/ktEik-YaZoen6Rhy/images/gdk/services/xr007-crossnetworkroster.png?fit=max&auto=format&n=ktEik-YaZoen6Rhy&q=85&s=19bdb24b8a41f698f6e8f56083dbac61" alt="クロスネットワークロースター UI を示すスクリーンショット" width="482" height="678" data-path="images/gdk/services/xr007-crossnetworkroster.png" />

   ロビー UI で、チームリーダーは次のステップのマッチプロパティ (レベルやカスタムルールなど) を選択して別のチームとのゲームセッションを見つけ、マッチを開始します。

7. ゲームセッションのマッチメイキング。

   既存のクロスネットワークチームは、チームリーダーが設定した追加のマッチプロパティとともにマッチメイキングに提出されます。これらのプロパティは、マッチのための新しい 2 つのチームの中で最良のマッチ結果を特定するために使用されます。この時点で、マッチサービスは両チームの専用サーバーも特定します。

8. ゲーム MPSD セッションを作成して参加します。

   匿名ゲームセッションマッチメイキングの結果は、マッチサービス (または専用サービス) が XBOX Live へのサービス間呼び出しを通じて作成した MPSD ゲームセッションです。すべての XBOX Live プレイヤーがこのゲームセッションに参加し、サービスはカスタムプロパティを使用して XBOX Live を使用していないセッション内のプレイヤーに関するヒントを追加提供します。これらのヒントは、セッション状態を設定するためにクライアントロジックで使用できます。

9. 専用サーバーに接続。

   最終ステップとして、すべてのクライアントが専用サーバーに安全に接続し、クロスネットワークゲームプレイを開始します。マルチプレイヤーネットワーク間のすべてのトラフィックは専用サーバー経由でルーティングする必要があります。ピアツーピア接続は許可されません。

10. ゲームプレイの完了。

    ゲームプレイマッチが完了した後、チームは次の表に示すアクションを実行することを選択できます。

    | アクション         | 説明                                                                                   |
    | ------------- | ------------------------------------------------------------------------------------ |
    | マッチを再プレイする    | プレイヤーはサーバーへの接続を維持し、MPSD ゲームセッションに残ります。プレイヤーは新しいゲームプレイマッチを開始します。                      |
    | 新しい対戦相手を検索する。 | プレイヤーはサーバーから切断し、MPSD ゲームセッションを離れます。プレイヤーはロビーセッションにとどまり、次のマッチメイキングラウンドのためにロビー画面に戻ります。 |

## セッション管理

すべての XBOX 要件に準拠するために、タイトルは次の表に示すように XBOX Live プレイヤー用に 2 つの MPSD セッションを作成します。

| セッション    | 説明                                                                                                                                                                                                                                                                   |
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ロビーセッション | このセッションはマッチメイキングサービスが XBOX Live へのサービス間呼び出しを通じて作成します。作成時、セッションにはチーム内のすべての XBOX Live プレイヤーの予約が含まれます。プレイヤーが招待を送信したり、参加継続 (join-in-progress) が可能なセッションです。招待と参加継続は XBOX Live のシステムを使用する必要があり、ネットワーク間で行うことはできません。したがって、すべての XBOX Live プレイヤーがこのセッションをアクティビティセッションとして設定します。 |
| ゲームセッション | このセッションはマッチメイキングサービスが XBOX Live へのサービス間呼び出しを通じて作成します。ゲームセッション内のすべての XBOX Live プレイヤー (チームを越えて) の予約が含まれ、XBOX Live プレイヤーのマルチプレイヤーアクティビティを追跡するために使用されます。                                                                                                                 |

XBOX Live を使用しないプレイヤーは、MPSD セッションでセッションメンバーとして直接表現されません。タイトルは、次のコード例に示すようにカスタムセッションプロパティで存在のみを追跡します。

```
{{"name":"kumarplayer"},{"name":"spencerplayer"},{"name":"eliseplayer"}}
```

このリストと XBOX Live のセッションメンバーを使用して、セッションが満員かどうかを判定できます。満員の場合、正しい動作のために XBOX Live 用の招待および参加継続機能を無効化する必要があります。プレイヤー (またはサーバー) がセッションの `closed` プロパティを設定してこの機能を無効化します。

<Note>ゲームプレイ内のプレイヤーを追跡するために使用される MPSD セッションでは、XBOX 要件に準拠するために `gameplay` 機能を有効にする必要があります。</Note>

## プレイヤーコミュニケーションのブロックと報告

タイトル内でのプレイヤーブロックは、タイトルレベルでサポートされます。

### XBOX Live プレイヤーのブロック

タイトルは、[XblPrivacyBatchCheckPermissionAsync](/reference/live/xsapi-c/privacy_c/functions/xblprivacybatchcheckpermissionasync) を使用してマルチプレイヤー用の権限をチェックします。タイトルはまた、別の XBOX Live プレイヤーとチャットする場合や、XBOX Live を使用しないプレイヤー/XBOX Live を使用しないフレンドのプレイヤークラスとチャットする場合にもこれを使用します。タイトルは、[XGameUiShowPlayerProfileCardAsync](/reference/system/xgameui/functions/xgameuishowplayerprofilecardasync) を通じて別のプレイヤーのプロファイルへのアクセスも提供します。プレイヤーは、プレイヤープロファイル UI で他のプレイヤーをブロックできます。

### XBOX Live を使用しないプレイヤーのブロック

タイトルは、XBOX Live を使用しないプレイヤーとのコミュニケーションのブロックをサポートするために、タイトル内ブロックリストを使用します。このリストはタイトルサービスで管理され、マルチプレイヤー権限のためにチェックされます。クロスネットワークチャットはデフォルトでは利用できません。XBOX Live を使用しないプレイヤーは、次のスクリーンショットに示すようにカスタムタイトル UI を通じてタイトル内でブロックできます。

<img src="https://mintcdn.com/microsoft-4404708b/ktEik-YaZoen6Rhy/images/gdk/services/xr007-playercommblocking.png?fit=max&auto=format&n=ktEik-YaZoen6Rhy&q=85&s=a3e844b13d36e45906f7bbcb807d355c" alt="プレイヤーコミュニケーションのブロックを示すスクリーンショット" width="1300" height="731" data-path="images/gdk/services/xr007-playercommblocking.png" />

### XBOX Live プレイヤーの報告

タイトルはプレイヤーの報告も許可します。XBOX Live の場合、プレイヤーはプレイヤープロファイル UI を通じて他のプレイヤーを報告します。XBOX Live のエンフォースメントがプレイヤーレポートを処理します。

### XBOX Live を使用しないプレイヤーの報告

XBOX Live を使用しないプレイヤーの場合、タイトルはカスタム報告 UI フローを提供します。タイトルは、他のマルチプレイヤーネットワークによるガイドラインに基づいて、タイトルに対するプレイヤーレポートを適切に処理します。

## Microsoft Store

XBOX Live や他のマルチプレイヤーネットワーク上でのゲーム内通貨の購入は、タイトルサービスで追跡されます。タイトルは、すべてのタイトルバージョン間で共有された仮想通貨ウォレットとゲーム内アイテムインベントリを提供します。次の表に示す制限は、XBOX Live 以外のタイトルバージョンに適用されます。

| 制限            | 説明                                                                                                                                                                                                                                        |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| プレイヤースキン      | プレイヤーはゲーム内通貨のみでプレイヤースキンを購入できます。ゲーム内通貨は、すべてのネットワーク間で利用可能な統一されたゲーム内ウォレットで管理されます。すべてのプレイヤースキンは、すべてのタイトルバージョンで同一です。                                                                                                                           |
| 消費アイテム        | プレイヤーはゲーム内通貨のみで消費アイテムを購入できます。通貨と同様に、消費アイテムも統一されたゲーム内インベントリで管理されます。                                                                                                                                                                        |
| ダウンロード可能コンテンツ | XBOX Live プラットフォームでは、ダウンロード可能コンテンツ (新しいマップとキャラクタータイプ) は Microsoft Store を通じて管理されます。他のストアからのエンタイトルメントは共有されません。同じマップで一緒にプレイするには、すべてのプレイヤーがそれぞれのストアで有効なエンタイトルメントを持っている必要があります。マッチするエンタイトルメントを持たないプレイヤーには、購入されていないキャラクタータイプは表示されますが、プレイできません。 |

## 実績

タイトルには、プレイされたマルチプレイヤーゲームを含む、マルチプレイヤーアクションに基づく複数の実績があります。この (および同様の) 実績の進行状況には、クロスネットワークマルチプレイヤーゲームセッションが含まれます。タイトルには、クロスネットワークゲームプレイに限定された実績はありません。XBOX One ファミリー (以降) のタイトル実績の進行状況は、他のタイトルバージョンでのゲームプレイを通じて可能です。

## プレイヤーの進行状況

プレイヤーの進行状況は、すべてのタイトルバージョン間で共有されます。カスタムタイトルアカウントには、プレイヤーの進行状況の一部が保持されます。

## Game DVR とブロードキャスト

タイトルは、クロスネットワークマルチプレイヤーマッチでの Game DVR とスクリーンショット、およびブロードキャストのサポートを提供します。

## リーダーボード

タイトルのリーダーボードは、XBOX Live のリーダーボードを超える広範なリーダーボード機能を提供するタイトルサービスを通じて実装されます。サービスは複数の基礎リーダーボードを作成し、それらを並行して更新します。各マルチプレイヤーネットワークごとに 1 つのリーダーボードと、すべてのマルチプレイヤーネットワークの結果を組み合わせた 1 つのマージされたリーダーボードです。クロスネットワークマルチプレイヤーが有効になっている場合、次のスクリーンショットに示すようにマージされたリーダーボードが表示されます。

<img src="https://mintcdn.com/microsoft-4404708b/ktEik-YaZoen6Rhy/images/gdk/services/xr007-leaderboard.png?fit=max&auto=format&n=ktEik-YaZoen6Rhy&q=85&s=eeecf23c0122c9a89fdd62c4762cc375" alt="マージされたリーダーボードを示すスクリーンショット" width="536" height="350" data-path="images/gdk/services/xr007-leaderboard.png" />

<Note>すべてのプレイヤーは、マルチプレイヤーロビーと同じ方法で表現されます。</Note>

プレイヤーがクロスネットワークゲームプレイ機能を無効にしている場合、XBOX Live のみのリーダーボードが表示されます。

タイトル固有のアカウントは、リーダーボードサービス上のすべてのプレイヤーを内部的に識別するために使用されます。XBOX Live プレイヤーの外部識別子は、クエリしているタイトルインスタンスによって異なります。

* XBOX Live のタイトルインスタンスでは、XUID が返され、クライアントはプレイヤーのゲーマータグ文字列を判定するためのルックアップを実行します。

* XBOX Live 以外のタイトルインスタンスでは、プレイヤーのゲーマータグまたは `DisplayName` 文字列が返されます。サービスは、XBOX Live へのサービス間呼び出しからこの文字列を取得し、最大 4 時間キャッシュします。


## Related topics

- [クロスネットワークマルチプレイヤーの実装例: MMO](/ja-jp/services/xbox-services/multiplayer/concepts/live-console-xr007-mmo-example.md)
- [XR-007 クロス ネットワーク プレイ — MMO 実装例](/ja-jp/publishing/certification/xr/xr-007-mmo.md)
- [XR-007 クロス ネットワーク プレイ — マルチプレイヤー実装](/ja-jp/publishing/certification/xr/xr-007-multiplayer.md)
- [XBOX の要件](/ja-jp/services/playfab/multiplayer/networking/xbox-requirements.md)
- [クロスプラットフォーム マルチプレイヤーの設計ガイダンス](/ja-jp/services/xbox-services/multiplayer/overviews/multiplayer-design-guidance-cross-platform.md)
