徳島ゲーム開発ごっこ 技術ブログ

ゲームを作るために役に立ったり立たなかったりする技術を学んでいきます!

【Unity】僕もPhotonを使いたい #04 ロビーからの流れ

 今回のPhotonについての調査は、ロビーに入った状態からの流れを見ていきます。
 Auto-Join Lobbyを有効にしている場合は、前回の記事をすっ飛ばしてここから読んでもなんとかなりますよー。


この記事にはUnity5.4.1f1及びPUN1.75を使用しています。

Photon未接続状態からの流れ

www.urablog.xyz

Photon接続状態からの流れ

www.urablog.xyz

ロビーにいる状態で使用する関数郡

 ロビーにいる状態で使用する関数や呼ばれるイベント関数は前回のPhoton接続済み状態のものと同じです(ゆえにほぼコピペです)。
 ロビーにいる状態ではPhoton接続済み状態と違って、ロビー内にルームが作成・削除された場合に、void OnReceivedRoomListUpdate()でキャッチすることが出来たり、GetRoomList()でロビー内のルーム情報をリストで取得できたりします。
 ただ、今回の調査は接続状態の変化する関数を呼んだ後に呼ばれるイベント関数の流れを調べたいので、今回はその点は割愛します。

使用する関数

 スクリプトリファレンス参照
https://photonengine.jp/pun-api/class_photon_network.html

  • bool PhotonNetwork.CreateRoom( string roomName )
    bool PhotonNetwork.CreateRoom( string roomName, RoomOptions roomOptions, TypedLobby typedLobby )
    bool PhotonNetwork.CreateRoom( string roomName, bool isVisible, bool isOpen, int maxPlayers )
    bool PhotonNetwork.CreateRoom( string roomName, bool isVisible, bool isOpen, int maxPlayers, Hashtable customRoomProperties, string[] propsToListInLobby )
    ルームを作成します。最大入場可能人数やルーム一覧を表示するかなどを指定できます。
    ロビー内に同じ名前のルームを作成することは出来ません。

  • bool JoinRoom( string roomName )
    bool JoinRoom( string roomName, bool createIfNotExists )
    ルームに入ります。指定した名前のルームが無かったり、ルームが満室だったり閉まっていたら失敗します。
    createIfNotExistsをtrueで渡すことで、ルームが無い場合は同時に作成されます。

  • bool JoinOrCreateRoom( string roomName, RoomOptions roomOptions, TypedLobby typedLobby )
    CreateRoom()JoinRoom()が合体したような関数です。
    指定したルームが既にあるならばそのルームに入り、無ければルームを作成します。

  • bool JoinRandomRoom()
    bool JoinRandomRoom( Hashtable expectedCustomRoomProperties, byte expectedMaxPlayers )
    bool JoinRandomRoom( Hashtable expectedCustomRoomProperties, byte expectedMaxPlayers, MatchmakingMode matchingType, TypedLobby typedLobby, string sqlLobbyFilter )
    どこでもいいから入場可能なルームに入る関数です。
    引数を指定すれば、入るルームの条件を絞り込むことが出来ます。

  • bool LeaveLobby()
    ロビーから出ます。

  • void Disconnect()
    Photonネットワークから切断します。

呼ばれるイベント関数

 スクリプトリファレンス参照
https://photonengine.jp/pun-api/interface_i_pun_callbacks.html

  • void OnCreatedRoom()
    ルームを作成した際に呼ばれるようです。

  • void OnPhotonCreateRoomFailed( object[] codeAndMsg )
    ルームの作成に失敗した際に呼ばれるようです。

  • void OnJoinedRoom()
    ルームに入った際に呼ばれるようです。

  • void OnPhotonJoinRoomFailed( object[] codeAndMsg )
    ルームに入れなかった際に呼ばれるようです。

  • void OnPhotonRandomJoinFailed( object[] codeAndMsg )
    どのルームでもいいよといったにも関わらず、それでもルームに入れなかった際に呼ばれるようです。

  • void OnPhotonCustomRoomPropertiesChanged( Hashtable propertiesThatChanged )
    ルーム内のプロパティに変化があった際に呼ばれるようです。

  • void OnPhotonPlayerPropertiesChanged( object[] playerAndUpdatedProps )
    ルーム内のプレイヤーのプロパティに変化があった際に呼ばれるようです。

  • void OnReceivedRoomListUpdate()
    ロビー内のルームのリストが更新された際に呼ばれるようです。

  • void OnDisconnectedFromPhoton()
    Photonサーバーから回線を切断した後で呼ばれるようです。

ロビーにいる状態からの流れ

 さあ、フローチャート化してみてみましょうか。

 ルームを作成しようとした際の流れです。
 Photon接続状態との流れの違いは、一度ロビーを抜けてからルームに入るという点ですね。

f:id:urahimono:20160915223325p:plain

 ルームに入ろうとした際の流れです。
 作成時も入場時も失敗した場合は、未接続状態になるのではなく、まだロビーにいる点に注意が必要です。

f:id:urahimono:20160915223339p:plain

 JoinRandomRoom()を使用してルームに入ろうとした際の流れです。

f:id:urahimono:20160915223347p:plain

 ロビー内のルームが増減した場合の流れです。
 まあ、流れでもなんでもないんですが、一応記述しておきます。

f:id:urahimono:20160915223407p:plain

 ロビーから抜ける際の処理です。
 ここで、前回、前々回の記事で誤りがありました。
 Auto-Join Lobbyの場合は、Photon接続済み状態になることはありえないようなことを記述したのですが、LeaveLobby()をよんで任意でロビーから抜けた場合は、Photon接続済み状態になります。
 すみません、この流れを見逃していました。

f:id:urahimono:20160915223418p:plain

 通信を切断する際の流れです。

f:id:urahimono:20160915223425p:plain

 ロビーからの流れの調査結果はこんな感じです。
 次はPhotonの流れを調べようシリーズ最終回、ルームからの流れを調査します。

 次回 www.urablog.xyz

 前回 www.urablog.xyz