zoukankan      html  css  js  c++  java
  • 使用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)
    
  • 相关阅读:
    c# 国际化国家代码
    转:Oracle Connect By用法
    函数关系: 单射 满射 双射
    python 乱码
    2010年下半年全国计算机技术与软件专业技术资格(水平)考试试题下载
    HDU1068 Girls and Boys 最大独立子集
    HDU1151 Air Raid 最小简单路径覆盖
    POJ2411 Mondriaan's Dream 状态压缩+DP
    HDU1556 方格取数(1) 状态压缩+dp
    POJ2239 Selecting Courses 二分匹配
  • 原文地址:https://www.cnblogs.com/Firepad-magic/p/8336428.html
Copyright © 2011-2022 走看看