ルーム持続のガイド
このガイドでは、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
は、有効に動作するパスでなければなりません。
ルームに再び参加するには、以下を呼びます:
C#
loadBalancingClient.OpReJoinRoom(savedRoomName);
ゲームに挑戦や招待機能が含まれる場合は、「AsyncJoin」を有効にする必要があります(デフォルトでは有効)。
これによって、通常はルーム名でルームに参加できるようになります:
名前を指定してルームに参加できるようにします:
```csharp
loadBalancingClient.OpJoinRoom(roomName);
Webサーバーから、Webhookレスポンスで以前に保存したルームステートを返す必要があります。
## CheatSheet
<table class="table">
<thead>
<tr>
<th width="15%">
IsPersistent
</th>
<th width="15%">
PathCreate
</th>
<th width="15%">
PathClose
</th>
<th width="22.5%">
RoomOptions
</th>
<th width="32.5%">
Comment
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
true
</td>
<td>
valid path
</td>
<td>
valid path
</td>
<td>
<code>PlayerTTL == -1</code> <br>
<code>0 <= EmptyRoomTTL</code>
</td>
<td>
インアクティブプレイヤーがタイムアウトすることはありません。<br>
ルームステートは以下に該当しない場合、常に送信されます:
<ul>
<li> すべてのアクターが明示的に退室した場合。
<li> ルームが<code>EmptyRoomTTL</code>ミリ秒間、空だった場合。
</ul>
</td>
</tr>
<tr>
<td>
*
</td>
<td>
*
</td>
<td>
*
</td>
<td>
<code>EmptyRoomTTL >= PlayerTTL</code> <br>
<code>PlayerTTL >= 0</code>
</td>
<td>
今後GameClose Webhookにルームステートは送信されません。
</td>
</tr>
<tr>
<td>
true
</td>
<td>
有効なパス
</td>
<td>
有効なパス
</td>
<td>
<code>PlayerTTL > EmptyRoomTTL</code> <br>
<code>EmptyRoomTTL >= 0</code>
</td>
<td>
ルームの読み込みは、ルームの保存後<code>PlayerTTL - EmptyRoomTTL</code>ミリ秒間のみ可能です。
</td>
</tr>
<tr>
<td>
false
</td>
<td>
*
</td>
<td>
*
</td>
<td>
*
</td>
<td>
ルームの持続が有効でなくなりました。ルームステートは、今後GameClose Webhookに送信されません。
</td>
</tr>
<tr>
<td>
*
</td>
<td>
空であるか、または有効なパスではありません
</td>
<td>
*
</td>
<td>
*
</td>
<td>
ルームステートを読み込むことはできません。
</td>
</tr>
<tr>
<td>
*
</td>
<td>
*
</td>
<td>
空であるか、または有効なパスではありません
</td>
<td>
*
</td>
<td>
ルームステートが送信されることはありません。
</td>
</tr>
</tbody>
</table>
Back to top