使用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) 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM