日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PUN☀️三、服务器大厅、服务器房间

發布時間:2023/12/20 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PUN☀️三、服务器大厅、服务器房间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 🟥 目標
  • 🟧 開發過程
    • 1?? Unity界面
    • 2?? 用戶名同步
    • 3?? 點擊開始連接后,開始連接隱藏
  • 🟨 服務器房間設置
    • 🚩服務器房間屬性


🟥 目標

1、點“開始連接”,進入房間

2、將你的用戶名發送到PUN,實現同步

類似游戲中能看到其他用戶名字

3、點擊開始連接,開始連接隱藏,出現正在連接中的字樣。



🟧 開發過程

1?? Unity界面

a、界面

完成目標中UI的設置與邏輯。代碼自行編寫。

b、腳本綁定

實現點擊“開始連接”,進入房間。

  • 開始連接按鈕,綁定 Launcher 腳本的 Skode_JoinRoom



2?? 用戶名同步

告訴PUN你的名字,用于后面進行顯示。

  • 下腳本掛載到任意物體上,給該腳本綁定輸入框
  • 輸入框的OnEndEdit,綁定該腳本動態(Dynamic string)的SetPlayerName方法
using UnityEngine; using UnityEngine.UI; using Photon.Pun;public class PlayerNameInputField : MonoBehaviour {#region Parameterspublic InputField inputField;const string playerNamePrefKey = "PlayerName";string defaultName = string.Empty;#endregion#region Mono CallBacksvoid Start(){if (inputField != null){if (PlayerPrefs.HasKey(playerNamePrefKey)){defaultName = PlayerPrefs.GetString(playerNamePrefKey);inputField.text = defaultName;}}PhotonNetwork.NickName = defaultName;}#endregion#region Public Methods//設置玩家的名字,并將其保存在PlayerPrefs中以備將來使用。//在OnEndEdit綁定動態public void SetPlayerName(string value){if (string.IsNullOrEmpty(value)){Debug.LogError("輸入框應輸入玩家名字");return;}PhotonNetwork.NickName = value;PlayerPrefs.SetString(playerNamePrefKey, value);}#endregion }



3?? 點擊開始連接后,開始連接隱藏

注意:在連接服務器失敗OnDisconnected() 時,顯示開始連接和輸入名字:

Launcher最終代碼:

using UnityEngine; using Photon.Pun; using Photon.Realtime;public class Launcher : MonoBehaviourPunCallbacks {#region Parameters[Tooltip("連接服務器失敗后要顯示的物體")]public GameObject[] failedShow;//此客戶端的版本號。用戶之間通過gameVersion(允許你做出破壞性的改變)進行隔離。string gameVersion = "1";[SerializeField][Tooltip("最大連接人數")]byte maxPlayersPerRoom = 4;bool isPressPlay = false;#endregion#region Mono CallBacksvoid Awake(){// 這確保我們可以在主客戶端和同一房間的所有客戶端上使用photonnet . loadlevel()自動同步它們的級別PhotonNetwork.AutomaticallySyncScene = true;}void Start(){ConnectServer();}#endregion#region Public Method//綁定到開始連接上:連接到服務器房間public void Skode_JoinRoom(){isPressPlay = true;//若還未連接服務器,則先連接服務器,再加入房間if (!PhotonNetwork.IsConnected)ConnectServer();elseLoadRoom();}#endregion#region Private Methods//連接到服務器void ConnectServer(){// 檢查是否連接了服務器if (!PhotonNetwork.IsConnected){//首先連接到光子在線服務器。PhotonNetwork.GameVersion = gameVersion;PhotonNetwork.ConnectUsingSettings();}}void LoadRoom(){PhotonNetwork.JoinRandomRoom();}void LoadScene(){PhotonNetwork.LoadLevel("Room for " + PhotonNetwork.CurrentRoom.PlayerCount);}#endregion#region Pun Callbacks// 連接服務器成功回調public override void OnConnectedToMaster(){if (isPressPlay)LoadRoom();}//連接服務器失敗回調public override void OnDisconnected(DisconnectCause cause){Debug.LogWarningFormat("OnDisconnected() was called by PUN with reason {0}", cause);for (int i = 0; i < failedShow.Length; i++){failedShow[i].SetActive(true);}}// 加入房間成功回調public override void OnJoinedRoom(){//主客戶端加載場景即可。其他客戶端進入房間后,會自動加載主客戶端的場景if (PhotonNetwork.IsMasterClient)LoadScene();}//加入房間失敗回調public override void OnJoinRandomFailed(short returnCode, string message){Debug.Log("we failed to join a random room, maybe none exists or they are all full. No worries, we create a new room.");//創建房間后,會自動加入房間。從而觸發加入房間成功的回調。PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = maxPlayersPerRoom });}#endregion }



🟨 服務器房間設置

那么,我們來想一下:

  • 我們建好房間了,可想更改房間參數,更改房間最大人數,怎么辦呢?
  • 以及更改了,有沒有回調啊?
  • 加入隨即房間時,能不能自動篩選房間啊?

🚩服務器房間屬性

完成服務器房間屬性、自定義屬性的設置、更改。





大家還有什么問題,歡迎在下方留言!



如果你有 技術的問題 項目開發

都可以加下方聯系方式

和我聊一聊你的故事🧡

總結

以上是生活随笔為你收集整理的PUN☀️三、服务器大厅、服务器房间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。