主な機能
Multiplayer Manager API の主な機能は次のとおりです。- 簡単なセッション管理と XBOX services マッチメイキング
- 状態ベースおよびイベントベースのプログラミング モデル
- Multiplayer XR に準拠すると同時に XBOX services のベスト プラクティスを保証
- 2015 マルチプレイヤー フローチャートを実装
- 大規模な MPSD セッション (100 メンバーを超える) はサポートされていません。
- ピア ホスト型マルチプレイヤー設計のみを対象としています。専用サーバーを持つタイトルは、代わりに Multiplayer Activity Service または Multiplayer Service API と サービス間呼び出し (NDA トピック) を使用してください。
認定に合格するには、ゲームはオンライン マルチプレイヤーに必要なイベントを実装する必要があります。
概要
Multiplayer Manager は、以下の主要な概念を中心としています。- ロビー セッション: デバイスに対してローカルなユーザーと、一緒にプレイしたい招待されたフレンドを管理するために使用される永続的なセッション。 グループはゲーム (たとえば、複数のラウンド、マップ、レベル) をプレイできます。ロビー セッションは、この中心的なフレンドのグループ (デバイスに対してローカルなプレイヤーを含む) を追跡します。 通常、このグループは、ホストがメニューをナビゲートしたり、グループ メンバーとチャットしてどのゲーム モードをプレイするかを決めているときに形成されます。
- ゲーム セッション: ゲームの特定のインスタンスをプレイしているプレイヤーを追跡します。 たとえば、レース、マップ、またはレベルです。 ロビー セッションのメンバーを含む新しいゲーム セッションを、XblMultiplayerManagerJoinGameFromLobby を介して作成できます。 メンバーが招待を承諾すると、そのメンバーはロビーおよびゲーム セッション (空きがある場合) に追加されます。 マッチメイキングが有効な場合はゲーム セッションに追加のプレイヤーを追加できますが、それらの追加プレイヤーはロビー セッションには追加されません。 これは、ゲームが終了するとロビー セッションのプレイヤーは一緒にいるが、マッチメイキングからの追加のプレイヤーはそうではないことを意味します。
- XblMultiplayerManagerMember: ローカルまたはリモート デバイスにサインインしている個々のユーザーを表します。
- XblMultiplayerManagerDoWork: タイトルと XBOX services Multiplayer サービスの間で適切なゲーム状態の更新が維持されるようにします。 最高のパフォーマンスを確保するため、XblMultiplayerManagerDoWork はフレームごとに 1 回など、頻繁に呼び出す必要があります。 XblMultiplayerManagerDoWork は、ゲームが処理するための XblMultiplayerEvent コールバック イベントの配列を提供します。
ステート マシン
XblMultiplayerManagerDoWork の呼び出しは、状態を新鮮に保つために必要です。 Multiplayer Manager が動作するには、XblMultiplayerManagerDoWork メソッドを定期的に呼び出す必要があります。 これを行う最も信頼できる方法は、フレームごとに少なくとも 1 回呼び出すことです。 XblMultiplayerManagerDoWork は実行する作業がない場合はすぐに戻るため、頻繁に呼び出すことを心配する必要はありません。スレッド処理
Multiplayer Manager API から返されるすべてのオブジェクトは、スレッドセーフとは見なさないでください。 ただし、複数のスレッドから呼び出す場合に、スレッド同期を行うための制御を提供します。 ライブラリには内部的なマルチスレッド保護があります。ただし、1 つのスレッドが任意の値にアクセスする必要がある場合 (たとえば、別のスレッドが XblMultiplayerManagerDoWork を呼び出している間にメンバー リストを走査する場合など) は、独自のロックを実装する必要があります。状態ベースのモデル更新
Multiplayer Manager は、プレイヤーが参加、離脱、またはセッションが更新されたときに、バックグラウンドでセッションを更新する状態ベースのモデルを維持します。 UI スレッドとゲーム スレッドの間のスレッド同期問題を回避しやすくするために、Multiplayer Manager は、XblMultiplayerManagerDoWork メソッドを呼び出すまでは、セッションのアプリから見える状態を更新しません。 従来の方法では、バックグラウンド スレッドでセッション変更などのイベントに関する通知を受け取り、それを UI スレッドと同期してこれらの変更を表示する必要がありました。 Multiplayer Manager では、この裏側の作業が自動的に行われます。 メイン スレッドで任意のタイミングで XblMultiplayerManagerDoWork を呼び出して、Multiplayer Manager が裏側でバッファリングしている状態の最新スナップショットを取得できます。イベントと通知
Multiplayer Manager は、重要なイベントのセット (XblMultiplayerEvent を参照) を定義し、それらが発生したときに XblMultiplayerManagerDoWork メソッドを介してタイトルに通知します。 たとえば、イベントには、リモート プレイヤーの参加や離脱、メンバー プロパティの変更、セッション状態の変更が含まれます。 すべての Multiplayer Manager API は非同期です。 XblMultiplayerManagerDoWork メソッドは、これらの非同期操作が完了したときにイベントのリストを返します。 タイトルは、状況に応じてこれらのイベントを適切に処理する必要があります。 詳細については、XblMultiplayerEvent クラスのドキュメントを参照してください。 返される各 XblMultiplayerEvent にはEventArgsHandle が含まれ、これを使用してイベントの種類に適した args を取得する必要があります。
たとえば、XblMultiplayerEventType が MemberJoined の場合、XblMultiplayerEventArgsMembersCount と XblMultiplayerEventArgsMembers を呼び出すことができます。
以下の例は、XblMultiplayerManagerDoWork を使用してイベントを処理する方法を示します。
フラット C API
- XblMultiplayerEvent
- XblMultiplayerEventArgsMembers
- XblMultiplayerEventArgsMembersCount
- XblMultiplayerEventArgsPropertiesJson
- XblMultiplayerEventType
- XblMultiplayerManagerDoWork
- XblMultiplayerManagerMember
シナリオ
このセクションでは、一般的なシナリオと、各シナリオで呼び出す API について説明します。 Multiplayer Manager が裏側で何をしているかについての情報も提供されます。- Multiplayer Manager を使用してフレンドとマルチプレイヤー ゲームをプレイできるようにする
- Multiplayer Manager を使用して SmartMatch でマルチプレイヤー ゲームを見つける
- Multiplayer Manager を使用してゲーム招待を送信する
- Multiplayer Manager を使用してゲームを開始するためのプロトコル アクティベーションの処理
Multiplayer Manager が行わないこと
Multiplayer Manager は、マルチプレイヤー シナリオの実装を大幅に簡単にし、一部のデータを抽象化します。ただし、Multiplayer Manager は以下を処理しません。- MMORPG (大規模多人数同時参加型オンライン ゲーム) のような永続的なオンライン サーバー ゲーム、または大規模なセッション (1 セッションに 100 プレイヤーを超える) を必要とするその他のゲーム タイプ
- サーバー間のセッション管理
- きめ細かなレート制限 に準拠するための MPSD 呼び出しのスロットリング
- Multiplayer service API と Multiplayer Manager API の混在
Multiplayer Manager は特定のネットワーク技術に制限されておらず、任意のネットワーク通信レイヤーで動作するはずです。
リソース
API の動作例については、NetRumble サンプル を参照してください。 API ドキュメントについては、multiplayer_manager_c を参照してください。multiplayer_manager_c.h ヘッダー ファイルを表示することもできます。
質問、フィードバック、または Multiplayer Manager の使用で問題がある場合は、デベロッパー アカウント マネージャー (DAM) にお問い合わせいただくか、https://forums.xboxlive.com のフォーラムでサポート スレッドを投稿してください。