寫在翻譯前的話:
我使用過Photon,研究過Ulink這些Unity提供的多人線上遊戲伺服器元件,這些商業元件雖然很好很強大。但是對於一個獨立開發者來說,4000多軟妹幣還是點多。總想找一個免費的。對於Unity5.2版本後提供的Unity Networking元件(簡稱UNet),國外已經有很多開發者在使用了,雖然穩定性還有待考驗,但是unity官方是會不停更新的,主要的是免費的啊!官網沒有中文翻譯,所以自己準備把這塊翻譯下,有不好的地方敬請指出,共同完善這個中文文件。翻譯的過程就當是學習的過程,其他開發者如果翻譯過了,就當互相學習吧。
Networking概述
使用網路功能的使用者按需求不同可分為下面2種情況:
- 使用者使用Unity開發一個多人線上的遊戲,那麼應該從學習NetworkManager或者High Level API開始。
- 使用者需要構建底層網路框架或者編寫高階多人線上遊戲,那麼應該從NetworkTransport API開始學起。
High level scripting API
Unity網路模組有一個“高階”指令碼API(我們通常叫HLAPI)。使用HLAPI可以不關心具體網路底層實施細節。它能提供多人線上遊戲所需要的大多數常見操作命令。HLAPI提供以下功能:
- 使用“Network Manager”元件來管理遊戲的網路狀態
- 能製作“區域網聯機”類遊戲,這種遊戲客戶端可以作為一個遊戲主機,其他客戶端加入這個主機
- 提供通用的序列化方法對資料進行序列化
- 接收和傳送網路訊息
- 從客戶端向伺服器傳送網路命令
- 伺服器可以使用遠端過程呼叫(RPCS)客戶端
- 伺服器可以傳送網路事件到客戶端
Unity引擎和編輯器中的網路模組整合
Unity的網路模組已經整合到遊戲引擎和Unity編輯器中了,開發者可以在可視狀態下使用元件開發多人線上遊戲。它提供了:
- 一個NetworkIdentity元件提供給需要網路通訊的實體
- 一個NetworkBehaviour類提供給網路通訊指令碼
- 遊戲內物體座標和方位的自動同步
- 指令碼變數的自動同步
- 在Unity場景中提供可以拖放的網路模組
- 各種網路元件
網際網路服務
Unity提供了“網際網路服務”用於支援開發者的整個產品開發和釋出過程,包括:
- 遊戲配對服務
- 遊戲建立匹配和廣告匹配
- 提供配對列表和加入對戰功能
- 主機接替服務
- 不需要專門的伺服器而能在網路上聯機
- 給匹配的玩家們傳送群發訊息
實時的網路傳輸層
Unity提供了一個實時的網路傳輸層,包括:
- 優化後的UDP協議層
- 多通道設計用來避免資料堵塞問題
- 每一個通道提供不同等級的多樣化服務質量(QoS)
- 靈活的網路拓撲結構,能提供點對點(P2P)以及客戶端-伺服器(CS)架構
專案案例
開發者可以仔細研究Unity官網提供的多人線上遊戲專案,裡面有多種遊戲案例: