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