LoginSignup
5
3

More than 3 years have passed since last update.

PUN2 でRoom のリストを作ろうとしたけどOnRoomListUpdate が呼び出されない

Last updated at Posted at 2020-02-05

症状

こんな感じのコードを書いた。
このアプリを起動した状態で、
他のプロセスで同じPhoton のApp ID でPhotonNetwork を使ってルームを生成しているにもかかわらず、
ルームリスト更新のメソッドOnRoomListUpdate が呼び出されない。。。

public class NetworkInterface : MonoBehaviourPunCallbacks
{
     // ルームリストに更新があった時
    public override void OnRoomListUpdate(List<RoomInfo> roomList)
    {
        Debug.Log("OnRoomListUpdate");
        _roomList = roomList.Where(s => s.IsOpen).Select(s => RoomToString(s)).ToList(); 
    }
}

原因

PUN にはAuto Join Lobbyというプロパティがあって、アプリが起動したら勝手にロビーに入ってくれるような機能があったので、その時の感覚でやってたのがまずかった。
どうもPUN2 になってからAuto Join Lobby が廃止されたようで。。。

によると、"PhotonNetwork.autoJoinLobby is gone. Unless you need a lobby, don't join them." らしい。
ロビーに入らなくても部屋には入れるようです。むしろ必要ないならロビーに入るな、らしい。
一方、

によると、部屋の一覧を取得するには

"The OnRoomListUpdate() method is called only when you've explicitly joined the lobby via PhotonNetwork.JoinLobby()."

つまりロビーに入ってなければならないとのこと。ルームに入れる状態であってもロビーに入ってないと部屋の一覧は分からないらしい。そりゃそうか。
ということで、明示的にロビーに入るようにコードを追加。

public class NetworkInterface : MonoBehaviourPunCallbacks
{
    // マスターサーバーへの接続が成功した時に呼ばれるコールバック
    public override void OnConnectedToMaster()
    {
        PhotonNetwork.JoinLobby();
    }

    // ロビーに入った時
    public override void OnJoinedLobby()
    {
        Debug.Log("OnJoinedLobby");
    }

     // ルームリストに更新があった時
    public override void OnRoomListUpdate(List<RoomInfo> roomList)
    {
        Debug.Log("OnRoomListUpdate");
        _roomList = roomList.Where(s => s.IsOpen).Select(s => RoomToString(s)).ToList(); 
    }
}

無事OnRoomListUpdate が呼び出されました!

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3