ルーム持続のガイド

このガイドでは、Webサーバー上でPhotonのルームデータを持続する方法について説明します。

概念

Photonアプリケーションは基本的に同期しますが、非同期動作に対応するように拡張することができます。 Photon Webhookを有効にし設定することで、プレイヤーがゲームデータを失うことなくシームレスにルームを離れ、再入室することができるようになります。 友達からの招待による、非同期的なルーム参加を有効にすることもできます。

Photonでは、ゲームデータをルームステートと呼びます。ルームステートの構成は以下のとおりです。

  • ルームオプション
  • ルームプロパティ
  • アクタ一覧
  • イベントキャッシュ
  • インタレストグループ

退室したゲームを再開するには、ルームステートの再構築が必要です。 このため、ルームステートを現状のまま保存するのが、Photonでルームステートを持続する最も簡単な方法です。

ルームステートの保存

ルームステートを保存するには、以下のWebhookの設定が必要です:

  • BaseUrl は、利用可能なURLである必要があります。
  • IsPersistent = true
  • PathClose は、有効に動作するパスでなければなりません。

ルームを作成する際には、以下の条件を満たす必要があります:

  • RoomOptions.PlayerTTL == -1 または RoomOptions.PlayerTTL > RoomOptions.EmptyRoomTTL.
  • RoomOptions.CheckUserOnJoin = true.

プレイヤーがルームを放棄せずに退室するには、 「Disconnect()」または「OpLeave(true)」を呼び出す必要があります。

ルームステートはGameCloseWebhookで送信され、Webサーバーでそのステートを保存する必要があります。

ルームステートの読み込み

ルームステートを読み込むには、以下のWebhookの設定が必要です。

  • BaseUrl は、利用可能なURLである必要があります。
  • IsPersistent = true
  • PathCreate は、有効に動作するパスでなければなりません。

ルームに再び参加するには、以下を呼びます:

loadBalancingClient.OpReJoinRoom(savedRoomName);

ゲームに挑戦や招待機能が含まれる場合は、「AsyncJoin」を有効にする必要があります(デフォルトでは有効)。 これによって、通常はルーム名でルームに参加できるようになります: 名前を指定してルームに参加できるようにします:

csharp loadBalancingClient.OpJoinRoom(roomName);

Webサーバーから、Webhook応答で以前に保存したルームステートを返す必要があります。

CheatSheet

IsPersistent PathCreate PathClose RoomOptions Comment
true valid path valid path PlayerTTL == -1 && 0 <= EmptyRoomTTL 非アクティブプレイヤーがタイムアウトすることはありません。
ルームステートは以下に該当しない場合、常に送信されます:
  • すべてのアクターが明示的に退室した場合。
  • ルームがEmptyRoomTTLミリ秒間、空だった場合。
* * * EmptyRoomTTL >= PlayerTTL >= 0 今後GameClose Webhookにルームステートは送信されません。
true 有効なパス 有効なパス PlayerTTL > EmptyRoomTTL >= 0 ルームの読み込みは、ルームの保存後PlayerTTL - EmptyRoomTTLミリ秒間のみ可能です。
false * * * ルームの持続が有効でなくなりました。ルームステートは、今後GameClose Webhookに送信されません。
* 空であるか、または有効なパスではありません * * ルームステートを読み込むことはできません。
* * 空であるか、または有効なパスではありません * ルームステートが送信されることはありません。

 ドキュメントのトップへ戻る