7.19. 応用機能 - 複数プレイヤー参加機能
注意:

本機能は CTR ではサポートしていません。1 つのステーションから参加できるプレイヤーは 1 人になります。

 

複数プレイヤー参加機能とは、同じステーション上で遊んでいる複数のプレイヤーをセッションに参加させる機能です。

ステーションとプレイヤー

ステーションとはセッションに参加している端末のことで、プレイヤーはその端末上で実際に遊んでいるユーザーのことを示します。セッションに参加しているステーションとプレイヤーのイメージを図 7-12. ステーションとプレイヤー に示します。

メッシュやマッチメイクセッションへの参加はステーション単位で行われます。メッシュの参加者数はステーション単位で管理されますが、マッチメイクセッションへの参加者数は後述する Session::StartupSetting を継承する構造体の isPlayersCountedAsParticipant の設定で変わります。

図 7-12. ステーションとプレイヤー

セッションに参加するプレイヤーの設定

セッションに参加するプレイヤーの設定はセッションのスタートアップで行います。各ネットワーク毎の Session::StartupSetting を継承する構造体のメンバー playerInfo にプレイヤー情報用の transport::Station::PlayerInfo を設定し、その構造体を Session::Startup の引数に指定します。複数のプレイヤーを登録する場合は playerInfo に人数分の有効なプレイヤー情報を設定します。たとえば、図 7-13. 複数プレイヤーのステーション参加 で示すセッションに対して Player3, Player4 が存在している StationC が参加する場合は、playerInfo[0] に Player3, playerInfo[1] に Player4 のプレイヤー情報を設定します。

図 7-13. 複数プレイヤーのステーション参加

複数プレイヤー参加時の参加者数

複数プレイヤーを参加させる際に、プレイヤー数をマッチメイクセッションの参加数に含めるかどうかを Session::StartupSetting を継承する構造体の isPlayersCountedAsParticipant で選択できます。
セッション内に存在するプレイヤー人数をセッション作成時に指定する最大参加者までに収めたい場合は isPlayersCountedAsParticipant に true を指定します。false を指定した場合はプレイヤー人数によらず、マッチメイクセッションの参加者は一人とみなされます。
た とえば、図 7-13. 複数プレイヤーのステーション参加 で示すセッションの最大参加者が 3 であったとします。StationC がセッションに参加する場合、isPlayersCountedParticipant が true ならマッチメイクセッションに Player3, Player4 の2人が参加しようとしているとみなされるので参加に失敗しますが、false ならプレイヤー人数をマッチメイクセッションの参加者としてカウントせず1人参加とみなすので参加できます。

参加者数の取得 API

Session にはセッション内の参加者数を取得する API として以下を用意しています。

API 名 説明 更新タイミング
Session::GetMatchmakeSessionStationNum() マッチメイクセッションに参加しているステーション数を取得します。 ゲームサーバーからマッチメイクセッションの参加者増減の通知時
Session::GetStationNum() セッション(メッシュとマッチメイクセッション)に参加しているステーション数を取得します。 セッションの参加者増減イベント発生時
Session::GetMatchmakeSessionParticipantNum() マッチメイクセッションに参加している参加者数を取得します。 ゲームサーバーからマッチメイクセッションの参加者増減の通知時
Session::GetPlayerNum() セッション(メッシュとマッチメイクセッション)に参加しているプレイヤー数を取得します。 セッションの参加者増減イベント発生時

ステーションはマッチメイクセッションに参加した後、メッシュに参加するため、7.18. 応用機能 - マッチメイクセッション参加者数取得機能 で説明しているように、セッション参加募集を締め切り時の新規参加者の存在は Session::GetMatchmakeSessionStationNum() と Session::GetStationNum() を比較することで検知できます。参加しているセッションに参加可能な人数はセッションの最大参加者数 - Session::GetMatchmakeSessionParticipantNum() で計算できます。