PUN2多人联网之房间选择、创建房间

前言

这篇文章的由来是:总结一下我在unity对PUN2的使用。我的开发环境是——Windows10、Visual Studio2019、unity2020.3.20f1,目的是为pico neo3开发VR多人游戏。

效果

在画面A输入自己的名称后,点击play进入下一个画面B;在B的左侧可以看到当前已经创建的可进入的房间,右侧则可以自己输入名称创建房间
登录界面

房间列表显示与创建

具体实现

关键在于:
1、在连上master后(OnConnectedToMaster),加入大厅
2、在OnRoomListUpdate中,对获取的房间列表进行处理

处理方式建议:
1、使用字典存储,按照房间名-房间信息类
2、对显示房间列表的UI进行重置、然后重置字典
3、使用最新的房间列表更新UI,刷新字典

一般有两种方式:1、随机匹配 2、选择房间名匹配 3、个性化匹配,如输入密码进入

部分源码

 public override void OnConnectedToMaster()
        {
    
    
            // //以免离开房间后,回到登录界面因为连接上而调用,从而重复进入房间
            if (isConnecting)
            {
    
    

                if (IsRandomJoin)
                {
    
    
                    Loading.SetActive(false);
                    PhotonNetwork.JoinRandomOrCreateRoom();
                }
                else
                {
    
    
                    PhotonNetwork.JoinLobby();
                }


                isConnecting = false;
            }
        }
  public override void OnJoinedLobby()
        {
    
    
            //要加入大厅时,才显示房间列表,否则有可能报错
            base.OnJoinedLobby();
            Loading.SetActive(false);
            RoomPanel.SetActive(true);
        }
 //加入大厅也会触发这个回调
        public override void OnRoomListUpdate(List<RoomInfo> roomList)
        {
    
    
            // here you get the response, empty list if no rooms found
            ResetRoomList();

            if (roomList.Count != 0)
            {
    
    

                for (int i = 0; i < roomList.Count; i++)
                {
    
    
                    RoomInfo room = roomList[i];

                    GameObject game = Instantiate(roomPrefab, per);
                    RoomCell roomCell = game.GetComponent<RoomCell>();
                    roomCell.Loading = Loading;
                    roomCell.Info = room;
                    roomCellList.Add(roomCell.Info.Name, roomCell);
                }
            }
        }

参考资料

推荐油管教程
PUN2的基本教程可以在这里看
论坛讨论

猜你喜欢

转载自blog.csdn.net/xiaoLongww/article/details/122565714