• 使用Photon引擎进行unity网络游戏开发(三)——网络游戏大厅及房间


    使用Photon引擎进行unity网络游戏开发(三)——网络游戏大厅及房间

    连接到Photon

    ConnectUsingSettings 设置你的客户端的游戏版本并使用一个由PUN设置向导写入的配置文件,该配置文件保存在PhotonServerSettings里面。

    PhotonNetwork.ConnectUsingSettings("1.0");
    

    游戏大厅

    进入游戏大厅:

    MasterServer会管理多个游戏大厅,当客户端连接至MasterServer后,需要选择一个游戏大厅进入

    方法一:设置PhotonServerSetting中的Auto Join Lobby选项进入默认游戏大厅

    enter description here

    方法二:覆写OnConnectedToMaster()方法,指定游戏大厅进入

       /// <summary>
        /// 进入大厅回调
        /// </summary>
        public override void OnJoinedLobby()
        {
            Debug.Log("欢迎 " + PhotonNetwork.player.NickName);
            UserMessageText.text = "欢迎 " + PhotonNetwork.player.NickName;
        }
    

    游戏房间

    创建游戏房间

    通过CreateRoom方法我们可以创建游戏房间,其中RoomOption类可以帮助我们设置房间的一些属性,如房间中的人数,房间大厅中是否可见等

    PhotonNetwork.CreateRoom(roomName.text, roomOptions, TypedLobby.Default);
    
        public void ClickConfirmCreateRoomButton()
        {
            RoomOptions roomOptions = new RoomOptions();
            RectTransform toggleRectTransform = MaxPlayerToggle.GetComponent<RectTransform>();
            int childCount = toggleRectTransform.childCount;
            for (int i = 0; i < childCount; i++)
            {
                if (toggleRectTransform.GetChild(i).GetComponent<Toggle>().isOn)
                {
                    roomOptions.MaxPlayers = maxPlayerNum[i];
                    break;
                }
            }
    
            RoomInfo[] roomInfos = PhotonNetwork.GetRoomList();
            bool isRoomNameReapeat = false;
    
            foreach (RoomInfo roomInfo in roomInfos)
            {
                if (roomName.text == roomInfo.Name)
                {
                    isRoomNameReapeat = true;
                }
            }
    
            if (isRoomNameReapeat)
                roommNameHint.text = "房间名称重复!";
             else
                {
                    PhotonNetwork.CreateRoom(roomName.text, roomOptions, TypedLobby.Default);
                    CreateRoomPanel.SetActive(false);
                    roomLoadingPanel.SetActive(true);
                }
        }
    

    加入游戏房间

    随机加入房间

    PhotonNetwork.JoinRandomRoom();
    

    加入特定的房间

    PhotonNetwork.JoinRoom(roomName);
    

    显示和更新房间列表

    通过Photon提供的OnReceivedRoomListUpdate()回调函数,我们可以处理房间内大厅更新时的逻辑,例如更新UI中显示的房间列表。

        /// <summary>
        /// 覆写回调函数,当房间更新时调用
        /// 更新游戏大厅中的房间列表信息
        /// </summary>
        public override void OnReceivedRoomListUpdate()
        {
            roomInfo=PhotonNetwork.GetRoomList();
            ...
    		ShowRoomMessage();
        }
    	private void ShowRoomMessage()
    	{
    		//通过roomInfo信息来显示房间信息
    		...
    	}
    

    常用回调函数

     /// <summary>
        /// 进入大厅回调
        /// </summary>
        public override void OnJoinedLobby()
    	
    	
    	/// <summary>
        /// 连接失败回调
        /// </summary>
        /// <param name="cause"></param>
        public override void OnConnectionFail(DisconnectCause cause)
    	
    	
    	//进入游戏房间回调函数
        public override void OnJoinedRoom()
    	
    	
         //客户端连接到masterserver时调用,加入默认游戏大厅
        //等同于Photonseversetting中勾选Auto join lobby
        public override void OnConnectedToMaster()
        
    	
    	 /// <summary>
        /// 当房间列表更新时调用
        /// </summary>
        public override void OnReceivedRoomListUpdate()
    	
    	//当加入房间失败时调用
    	 public override void OnPhotonJoinRoomFailed(object[] codeAndMsg)
    
  • 相关阅读:
    linux(6)查看进程ps命令
    Python 基础03 序列
    Python 基础02 基本数据类型
    Python基础01 Hello World!
    Linux vi/vim
    Laravel 的HTTP控制器
    Laravel 下的伪造跨站请求保护 CSRF#
    Linux 磁盘管理
    Linux 用户he用户组管理
    Linxu 用户和用户组管理1
  • 原文地址:https://www.cnblogs.com/Firepad-magic/p/8336428.html
Copyright © 2020-2023  润新知