さて今回ではPhotonの流れを調べようシリーズ最終回、ルームからの流れを調査します。
これでPhoton接続関連の挙動が大体見えてくるはずです。多分!
はやくゲームが作りたいなぁ……。
この記事にはUnity5.4.1f1及びPUN1.75を使用しています。
Photon未接続状態からの流れ
Photon接続状態からの流れ
ロビーにいる状態からの流れ
ルームにいる状態で使用する関数郡
プレイヤーの同期を取ったり、全ての端末に敵を出現させたりと、オンラインマルチゲームのゲーム部分はこのルーム内で行われます。
ただ今回の調査では、接続状態の変化する関数を呼んだ後に呼ばれるイベント関数の流れを調べたいので、同期などの処理についての調査は次回以降にまわします。
使用する関数
スクリプトリファレンス参照
https://photonengine.jp/pun-api/class_photon_network.html
bool LeaveRoom()
ルームから出ます。
Auto-Join Lobbyが有効かどうかでその後の流れが変わります。
有効な場合はロビーに、そうでない場合はPhoton接続済み状態になります。bool CloseConnection( PhotonPlayer kickPlayer )
指定したプレイヤーを部屋から追い出します。
MasterClientのみが使用可能な関数です。void Disconnect()
Photonネットワークから切断します。
呼ばれるイベント関数
スクリプトリファレンス参照
https://photonengine.jp/pun-api/interface_i_pun_callbacks.html
void OnPhotonPlayerConnected( PhotonPlayer newPlayer )
誰かがルームに入室したときに呼ばれるようです。void OnPhotonPlayerDisconnected( PhotonPlayer otherPlayer )
誰かがルームを退室したときに呼ばれるようです。void OnMasterClientSwitched( PhotonPlayer newMasterClient )
MasterClientが変更になった際に呼ばれるようです。void OnLeftRoom()
ルームを退室した際に呼ばれるようです。void OnReceivedRoomListUpdate()
ロビー内のルームのリストが更新された際に呼ばれるようです。void OnDisconnectedFromPhoton()
Photonサーバーから回線を切断した後で呼ばれるようです。void OnJoinedLobby()
マスターサーバーのロビーに入ったときに呼ばれるようです。
ルームにいる状態からの流れ
これが最後のフローチャートになります。
自分以外の誰かがルームに入室した際の流れです。
OnPhotonPlayerConnected()
が呼ばれるだけです。
自分以外の誰かがルームから退室した際の流れです。
退室者がMasterClientかどうかで流れが変わります。
自分がルームを退室する際の流れです。
これはAuto-Join Lobbyが有効かどうかで流れが変わります。
Auto-Join Lobbyが有効な場合はロビー入室後、ルームにまだ他のプレイヤーがいるいないに関わらずOnReceivedRoomListUpdate()
が2回呼ばれました。
次はキック処理についてです。
キック処理であるCloseConnection()
はMasterClientでなければ呼べません。
まずは自分が他の人をキックする際の流れです。
次に自分がMasterClientで無いときに、キックされた際の流れです。
自分がキックされた際の流れもAuto-Join Lobbyが有効かどうかで流れが変わります。
最後に通信を切断する際の流れです。
これで基本的なPhotonを利用した接続の流れが分かってきたようなきがします。
次回は同期のとるオブジェクトを生成していきたいと思います。
ようやくゲームらしいことが出来る……。