ルーム持続のガイド
このガイドでは、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 >= PlayerTTL PlayerTTL >= 0
|
今後GameClose Webhookにルームステートは送信されません。 |
true | 有効なパス | 有効なパス |
PlayerTTL > EmptyRoomTTL EmptyRoomTTL >= 0
|
ルームの読み込みは、ルームの保存後PlayerTTL - EmptyRoomTTL ミリ秒間のみ可能です。
|
false | * | * | * | ルームの持続が有効でなくなりました。ルームステートは、今後GameClose Webhookに送信されません。 |
* | 空であるか、または有効なパスではありません | * | * | ルームステートを読み込むことはできません。 |
* | * | 空であるか、または有効なパスではありません | * | ルームステートが送信されることはありません。 |