Help us understand the problem. What is going on with this article?

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

症状

こんな感じのコードを書いた。
このアプリを起動した状態で、
他のプロセスで同じ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 が廃止されたようで。。。

https://answers.unity.com/questions/1560130/photon-auto-join-lobby.html

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

https://stackoverflow.com/questions/52793933/how-can-i-list-rooms-in-unity-pun2

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

"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 が呼び出されました!

azarashin
Unity で色々作りますが、レーザーカッターで筐体作ったり回路作ったり、 機械学習したり、いろいろやってます。
https://www.pit-creation.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした