如何在 Unity 中列出房间?(PUN2)

7

我需要列出大厅场景中的房间。目前,我使用了以下代码,但不知道为什么它无法正常工作。这是正确的方法吗?

public override void OnRoomListUpdate(List<RoomInfo> roomList)
     {
         print(roomList.Count + " Rooms");
         base.OnRoomListUpdate(roomList);
         foreach (var Item in roomList)
         {
             RoomName = Item.Name;
             PlayerAmount = Item.PlayerCount;
             MaxPlayers = Item.MaxPlayers;
             PhotonNetwork.Instantiate("RoomPrefab", transform.position, transform.rotation);
             RoomPrefab.transform.Find("RoomName").GetComponent<Text>().text = RoomName;
             RoomPrefab.transform.Find("PlayerInt").GetComponent<Text>().text = PlayerAmount.ToString();
             if(MaxPlayers == 4)
             {
                 GameObject.Find("IPlayerA").GetComponent<Image>().sprite = Four;
             }
             else if (MaxPlayers == 2)
             {
                 GameObject.Find("IPlayerA").GetComponent<Image>().sprite = Two;
             }
             else if (MaxPlayers == 3)
             {
                 GameObject.Find("IPlayerA").GetComponent<Image>().sprite = Three;
             }
             RoomPrefab.transform.SetParent(ScrollView.transform, false);
         }
     }

我需要说明一下,我正在使用Photon的PUN2,所以GetRoomList无法使用。


2
预期客户端在房间内时不会收到任何房间列表更新。您可以尝试在进入房间或加入房间后清除本地存储的房间列表。稍后,当离开房间时,客户端应该在重新连接到MasterServer的大厅(即进入大厅)后立即接收最新的房间列表。-- https://forum.photonengine.com/discussion/12860/pun2-onroomlistupdate-not-called-while-in-room -- 你能看一下这个话题吗? - Jevgeni Geurtsen
请编辑您的问题并描述当您说“它不起作用”时的具体情况。是编译失败了吗?还是到达那段代码会导致应用程序崩溃?从您的问题中无法得知具体情况。 - Ruzihm
@JevgeniGeurtsen >客户端一旦进入大厅(连接到MasterServer),就应该立即收到最新的房间列表 我不会说连接到MasterClient自动意味着在大厅中。在我的情况下,只有在连接到MasterClient之后显式加入大厅才会调用OnRoomListUpdate - Serg
2个回答

2

1

OnRoomListUpdate() 方法仅在您通过 PhotonNetwork.JoinLobby() 明确加入大厅时调用。仅仅连接到主服务器是不够的,至少在 PUN v2.15 中是这样的,就像 Jevgeni Geurtsen 建议的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接