> ## 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.

# Multiplayer Manager の概要

> MPSD セッション管理、SmartMatch マッチメイキング、招待、および進行中のゲームへの参加を簡素化する高レベルな XBOX Live API である Multiplayer Manager の概要。

このトピックでは、セッション、マッチメイキング、およびゲーム招待を管理することでマルチプレイヤー機能を追加するための高レベル API について説明します。この API は、状態ベースおよびイベントベースのプログラミング モデルを提供します。

XBOX services は、タイトルにマルチプレイヤー機能を追加するための広範なサポートを提供します。これにより、ゲームは世界中の XBOX メンバーを接続できます。
これには、豊富なマッチメイキング シナリオ、プレイヤーが進行中のフレンドのゲームに参加できる機能などが含まれます。

Multiplayer API を直接使用して XBOX services マルチプレイヤーを実装することは、複雑なタスクになる可能性があります。これには、ベスト プラクティスに従い、認定要件を満たしていることを確認するための、多くの設計とテストが必要です。

Multiplayer Manager は、セッションとマッチメイキングを管理し、状態ベースおよびイベントベースのプログラミング モデルを提供することにより、ゲームにマルチプレイヤー機能を簡単に追加できるようにします。

Multiplayer Manager は API のセットです。これらは、ピア ホスト型マルチプレイヤー設計の XBOX services ゲームでマルチプレイヤー シナリオを簡単に実装できるように設計されています。

Multiplayer Manager は、フレンドとのマルチプレイヤー ゲームのプレイ、ゲーム招待の処理、進行中のゲームへの参加処理、マッチメイキングなど、一般的なマルチプレイヤー シナリオを中心とした API を提供します。

Multiplayer Manager は複数のローカル ユーザーをサポートします。また、サードパーティのマッチメイキング サービスを使用している場合に、タイトルが Multiplayer Session Directory (MPSD) と簡単に統合できるようになります。これらのシナリオの多くは、わずか数回の API 呼び出しで実現できます。

## 主な機能

Multiplayer Manager API の主な機能は次のとおりです。

* 簡単なセッション管理と XBOX services マッチメイキング
* 状態ベースおよびイベントベースのプログラミング モデル
* Multiplayer XR に準拠すると同時に XBOX services のベスト プラクティスを保証
* 2015 マルチプレイヤー フローチャートを実装

Multiplayer Manager API 設計に関する重要な情報は次のとおりです。

* 大規模な MPSD セッション (100 メンバーを超える) はサポートされていません。
* ピア ホスト型マルチプレイヤー設計のみを対象としています。専用サーバーを持つタイトルは、代わりに [Multiplayer Activity Service](/services/xbox-services/multiplayer/mpa/live-mpa-overview) または [Multiplayer Service API](/services/xbox-services/multiplayer/mpsd/live-mpsd-overview) と [サービス間呼び出し (NDA トピック)](/services/xbox-services/fundamentals/s2s-auth-calls/s2s-calls/live-title-service-calls-xbox-live) を使用してください。

<Info>認定に合格するには、ゲームはオンライン マルチプレイヤーに必要なイベントを実装する必要があります。</Info>

## 概要

Multiplayer Manager は、以下の主要な概念を中心としています。

* **ロビー セッション:** デバイスに対してローカルなユーザーと、一緒にプレイしたい招待されたフレンドを管理するために使用される永続的なセッション。

  グループはゲーム (たとえば、複数のラウンド、マップ、レベル) をプレイできます。ロビー セッションは、この中心的なフレンドのグループ (デバイスに対してローカルなプレイヤーを含む) を追跡します。
  通常、このグループは、ホストがメニューをナビゲートしたり、グループ メンバーとチャットしてどのゲーム モードをプレイするかを決めているときに形成されます。

* **ゲーム セッション:** ゲームの特定のインスタンスをプレイしているプレイヤーを追跡します。

  たとえば、レース、マップ、またはレベルです。
  ロビー セッションのメンバーを含む新しいゲーム セッションを、[XblMultiplayerManagerJoinGameFromLobby](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerjoingamefromlobby) を介して作成できます。

  メンバーが招待を承諾すると、そのメンバーはロビーおよびゲーム セッション (空きがある場合) に追加されます。

  マッチメイキングが有効な場合はゲーム セッションに追加のプレイヤーを追加できますが、それらの追加プレイヤーはロビー セッションには追加されません。
  これは、ゲームが終了するとロビー セッションのプレイヤーは一緒にいるが、マッチメイキングからの追加のプレイヤーはそうではないことを意味します。

* [XblMultiplayerManagerMember](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayermanagermember): ローカルまたはリモート デバイスにサインインしている個々のユーザーを表します。

* [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork): タイトルと XBOX services Multiplayer サービスの間で適切なゲーム状態の更新が維持されるようにします。

  最高のパフォーマンスを確保するため、[XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) はフレームごとに 1 回など、頻繁に呼び出す必要があります。

  [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) は、ゲームが処理するための [XblMultiplayerEvent](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayerevent) コールバック イベントの配列を提供します。

## ステート マシン

[XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) の呼び出しは、状態を新鮮に保つために必要です。
Multiplayer Manager が動作するには、[XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) メソッドを定期的に呼び出す必要があります。
これを行う最も信頼できる方法は、フレームごとに少なくとも 1 回呼び出すことです。

[XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) は実行する作業がない場合はすぐに戻るため、頻繁に呼び出すことを心配する必要はありません。

### スレッド処理

Multiplayer Manager API から返されるすべてのオブジェクトは、スレッドセーフとは見なさないでください。
ただし、複数のスレッドから呼び出す場合に、スレッド同期を行うための制御を提供します。

ライブラリには内部的なマルチスレッド保護があります。ただし、1 つのスレッドが任意の値にアクセスする必要がある場合 (たとえば、別のスレッドが [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) を呼び出している間にメンバー リストを走査する場合など) は、独自のロックを実装する必要があります。

### 状態ベースのモデル更新

Multiplayer Manager は、プレイヤーが参加、離脱、またはセッションが更新されたときに、バックグラウンドでセッションを更新する状態ベースのモデルを維持します。
UI スレッドとゲーム スレッドの間のスレッド同期問題を回避しやすくするために、Multiplayer Manager は、[XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) メソッドを呼び出すまでは、セッションのアプリから見える状態を更新しません。

従来の方法では、バックグラウンド スレッドでセッション変更などのイベントに関する通知を受け取り、それを UI スレッドと同期してこれらの変更を表示する必要がありました。
Multiplayer Manager では、この裏側の作業が自動的に行われます。

メイン スレッドで任意のタイミングで [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) を呼び出して、Multiplayer Manager が裏側でバッファリングしている状態の最新スナップショットを取得できます。

## イベントと通知

Multiplayer Manager は、重要なイベントのセット ([XblMultiplayerEvent](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayerevent) を参照) を定義し、それらが発生したときに [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) メソッドを介してタイトルに通知します。
たとえば、イベントには、リモート プレイヤーの参加や離脱、メンバー プロパティの変更、セッション状態の変更が含まれます。

すべての Multiplayer Manager API は非同期です。
[XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) メソッドは、これらの非同期操作が完了したときにイベントのリストを返します。
タイトルは、状況に応じてこれらのイベントを適切に処理する必要があります。
詳細については、[XblMultiplayerEvent](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayerevent) クラスのドキュメントを参照してください。

返される各 [XblMultiplayerEvent](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayerevent) には `EventArgsHandle` が含まれ、これを使用してイベントの種類に適した `args` を取得する必要があります。
たとえば、[XblMultiplayerEventType](/reference/live/xsapi-c/multiplayer_manager_c/enums/xblmultiplayereventtype) が `MemberJoined` の場合、[XblMultiplayerEventArgsMembersCount](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayereventargsmemberscount) と [XblMultiplayerEventArgsMembers](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayereventargsmembers) を呼び出すことができます。

以下の例は、[XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) を使用してイベントを処理する方法を示します。

#### フラット C API

```cpp theme={null}
size_t eventCount{ 0 };
const XblMultiplayerEvent* events{ nullptr };
HRESULT hr = XblMultiplayerManagerDoWork(&events, &eventCount);
if (FAILED(hr))
{
    // Handle failure.
}

for (auto i = 0u; i < eventCount; ++i)
{
    switch (events[i].EventType)
    {
        case XblMultiplayerEventType::MemberJoined:
        {
            // Handle MemberJoined.
            size_t memberCount = 0;
            hr = XblMultiplayerEventArgsMembersCount(events[i].EventArgsHandle, &memberCount);
            assert(SUCCEEDED(hr));

            std::vector<XblMultiplayerManagerMember> members(memberCount);
            hr = XblMultiplayerEventArgsMembers(events[i].EventArgsHandle, memberCount, members.data());
            assert(SUCCEEDED(hr));
            ...

            break;
        }

        case XblMultiplayerEventType::SessionPropertyChanged:
        {
            // Handle SessionPropertyChanged.
            const char* changedProperty{ nullptr };
            hr = XblMultiplayerEventArgsPropertiesJson(events[i].EventArgsHandle, &changedProperty);
            assert(SUCCEEDED(hr));
            ...

            break;
        }
        ...
    }
}
```

詳細については、以下を参照してください。

* [XblMultiplayerEvent](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayerevent)
* [XblMultiplayerEventArgsMembers](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayereventargsmembers)
* [XblMultiplayerEventArgsMembersCount](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayereventargsmemberscount)
* [XblMultiplayerEventArgsPropertiesJson](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayereventargspropertiesjson)
* [XblMultiplayerEventType](/reference/live/xsapi-c/multiplayer_manager_c/enums/xblmultiplayereventtype)
* [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork)
* [XblMultiplayerManagerMember](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayermanagermember)

## シナリオ

このセクションでは、一般的なシナリオと、各シナリオで呼び出す API について説明します。
Multiplayer Manager が裏側で何をしているかについての情報も提供されます。

* [Multiplayer Manager を使用してフレンドとマルチプレイヤー ゲームをプレイできるようにする](/services/xbox-services/multiplayer/mpm/how-to/live-play-multiplayer-with-friends)
* [Multiplayer Manager を使用して SmartMatch でマルチプレイヤー ゲームを見つける](/services/xbox-services/multiplayer/mpm/how-to/live-play-multiplayer-with-matchmaking)
* [Multiplayer Manager を使用してゲーム招待を送信する](/services/xbox-services/multiplayer/mpm/how-to/live-send-game-invites)
* [Multiplayer Manager を使用してゲームを開始するためのプロトコル アクティベーションの処理](/services/xbox-services/multiplayer/mpm/how-to/live-handle-protocol-activation)

API の高レベルな概要については、[Multiplayer Manager API の概要](/services/xbox-services/multiplayer/mpm/concepts/live-multiplayer-manager-api-overview) を参照してください。

## Multiplayer Manager が行わないこと

Multiplayer Manager は、マルチプレイヤー シナリオの実装を大幅に簡単にし、一部のデータを抽象化します。ただし、Multiplayer Manager は以下を処理しません。

* MMORPG (大規模多人数同時参加型オンライン ゲーム) のような永続的なオンライン サーバー ゲーム、または大規模なセッション (1 セッションに 100 プレイヤーを超える) を必要とするその他のゲーム タイプ
* サーバー間のセッション管理
* [きめ細かなレート制限](/services/xbox-services/develop/best-practices/live-fine-grained-rate-limiting) に準拠するための MPSD 呼び出しのスロットリング
* Multiplayer service API と Multiplayer Manager API の混在

<Note>Multiplayer Manager は特定のネットワーク技術に制限されておらず、任意のネットワーク通信レイヤーで動作するはずです。</Note>

## リソース

API の動作例については、[NetRumble サンプル](https://aka.ms/gdkdl) を参照してください。

API ドキュメントについては、[multiplayer\_manager\_c](/reference/live/xsapi-c/multiplayer_manager_c/multiplayer_manager_c_members) を参照してください。
`multiplayer_manager_c.h` ヘッダー ファイルを表示することもできます。

質問、フィードバック、または Multiplayer Manager の使用で問題がある場合は、デベロッパー アカウント マネージャー (DAM) にお問い合わせいただくか、[https://forums.xboxlive.com](https://forums.xboxlive.com) のフォーラムでサポート スレッドを投稿してください。


## Related topics

- [XBOX services マルチプレイヤーの概要](/ja-jp/services/xbox-services/multiplayer/overviews/live-multiplayer-intro.md)
- [Multiplayer Manager API の概要](/ja-jp/services/xbox-services/multiplayer/mpm/concepts/live-multiplayer-manager-api-overview.md)
- [Multiplayer Manager の概念](/ja-jp/services/xbox-services/multiplayer/mpm/concepts/live-mm-concepts-nav.md)
- [XBOX Achievements Manager API の概要](/ja-jp/services/xbox-services/player-data/achievements/achievements-manager/live-achievements-manager-overview.md)
- [Multiplayer Session Directory の概要](/ja-jp/services/xbox-services/multiplayer/mpsd/live-mpsd-overview.md)
