项目实训--Unity多人游戏开发(九、PUN2学习记录)
文章目錄
- Photon Unity Networking簡介
- PUN2基礎&Lobby/Room
- 玩家昵稱
Photon Unity Networking簡介
Pun2是一個API很簡單的多人游戲開發框架。
可以通過繼承pun框架提供的類或實現其各種接口與unity項目融合實現多人聯機。
… …
PUN2基礎&Lobby/Room
Unity基礎知識不過多贅述。
從MonoBehaviour中派生出的類,MonoBehaviour本質上將我們的類變成了一個Unity組件,然后我們可以將它放到游戲對象或預設上。擴展MonoBehaviour的類可以訪問許多非常重要的方法和屬性。比如Start()等回調函數。
我們的游戲將有一個基于玩家數量的可調整大小的房間功能,為了確保加載的場景對于每個連接的玩家都是相同的,我們將利用Photon提供的PhotonNetwork.AutomaticallySyncScene(可見下例代碼)。當這個變量為true時,主客戶端可以調用PhotonNetwork.LoadLevel(),所有連接的玩家都會自動加載相同的關卡。
PUN對于回調非常靈活,并且提供了兩種不同的實現(繼承MonoBehaviourPunCallbacks類/單獨實現接口)。為了便于學習,讓我們涵蓋所有方法,我們將根據具體情況選擇最適合的方法。其中繼承類是最簡便的一種方法。
新建腳本 略
編寫連接服務器方法
添加using Photon.Pun;,代碼如下:
修改繼承類以重寫回調函數 把MonoBehaviour修改為MonoBehaviourPunCallbacks,這個類既有MonoBehaviour的特性又有各種Pun接口的特性。所以繼承之后再實現接口實際上也是去override回調方法。
添加命名空間引用 添加using Photon.Pun; using Photon.Realtime;
編寫回調函數
寫一個連接到主服務器的回調函數和斷開連接的回調函數。對于每一種情況都應該實現回調函數,以做出相應,增加軟件的5E特性。同時也是良好的人機交互的必要條件。
對于眾多的回調函數可以用#region …和#endregion包圍起來,更好的查看代碼。
若連接成功則調用加入房間
現在已經知道是否加入到了主服務器。
如果連接到了服務器那么就可以開始涉及到大廳與房間了,按照官方教程,大廳暫時不去詳細的寫。因為還涉及到GUI。下面先試著直接加入房間。
房間的回調
但是如果此時沒有任何一個房間,那么必然會報錯,而且我們也無法得知是否加入房間成功。
因此這里就需要房間相關的回調函數了。
tips:具體各種可能的狀況后續編寫應對,此處根據官方文檔進行最關鍵的回調方法進行學習。
暴露私有變量到unity的inspector面板
在變量上方加上標簽:[SerializeField]。
有些變量通過代碼來編寫其值可能不會特別方便或者有時候更合適inspector面板里手動去設置其值。
比如private byte maxPlayersPerRoom = 4;
這個值確實可以應用到每個房間的設置上。用以限定房間最大玩家數。
另外可以在此變量上方添加一個注釋:[Tooltip(“注釋”)]。
現在就可以通過實例化RoomOptions對象時設定最大玩家數,需要了解的是,此時不再是構造函數進行實例化。反而是大括號內書寫這個類中的公共變量的定義。
//現在不僅創建了房間,還通過設定建立了一個具有最大玩家數的房間。 PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = maxPlayersPerRoom });現在在代碼中使用了maxPlayerPerRoom的值去創建一個房間。如果人滿了,那么這個房間將不再接收其他人的加入。
現在可以做一個UI,當點擊按鈕時(比如登錄)再連接這個服務器。
這么做算是unity基礎了,不多說。
玩家昵稱
下面進行玩家昵稱的相關代碼編寫。
官方文檔是針對隨意設置昵稱,不講求賬號的區別性的教程。與項目內容有點出入。
下面按照所學,結合項目需求進行改寫:(昵稱即賬號)
首先說明一下執行邏輯:
玩家點擊登錄 → 向自開發服務端發送pack → 若驗證成功 → 玩家客戶端將登錄賬號作為昵稱然后連接pun服務端。
此時就需要一個變量保存玩家賬號。
當解析完服務端發來的pack確定登錄成功后,
游客線上模式仍然需要存儲在PlayerPrefs里的,盡量方便每次重新打開游戲時的使用,不用再需要用戶手動輸入。
游客模式下的GUI可以參考PUN Basics Tutorial–2–Creating The UI For The Player’s Name。
在InputField上掛在一個腳本并且實現OnValueChanged回調函數實時設置PhotonNetwork.NickName和保存到PlayerPrefs。
在開始連接之后,從人機交互角度上來說,有一個動畫效果顯示當前正在連接會帶來更好的體驗,同樣這也是官方所建議的。
這通過SetActive()就可以隨意控制,當然稍微復雜點也可以實現自己的UI代碼框架進行彈出窗體。
到此為止是PUN框架的昵稱、連接主服務器和大廳、房間等API的學習。
具體項目代碼和GUI設計見下一篇。
總結
以上是生活随笔為你收集整理的项目实训--Unity多人游戏开发(九、PUN2学习记录)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机如何手动新建服务启动项,电脑开机设
- 下一篇: ireport