[ Unity Multiplayer ] 多人連線遊戲概述

標籤: , ,

多人連線連線,無論是大型的MMORPG,或著單機遊戲附加的多人連線功能,只要把任意一款遊戲加上多人連線,感覺就比原本厲害了許多。

我想這對每位夢想開發遊戲的人或多或少都想過要製作這類遊戲,但卻不知道從何開始,也不容易找到一套完整的中文教學。

接下來將會分為「概述」、「UNet教學」、「遊戲實作」等多個階段,一步一步帶領大家進入「多人連線遊戲」這無底深坑。

---前言---

開發多人連線功能是非常吃力不討好的事情,以筆者大四製作專題時來說,光處理多人連線的部分就將進耗了我一半的開發時間,這表示我若是開發單機遊戲,將整整多出一倍的時間可以令我細心雕琢遊戲內容。不過會導致如此的原因有一部分是為了自我挑戰而自己從socket開始刻程式。

 

由於多人連線牽扯到的事項實在太多,非常不建議剛入門的新手直接接觸這塊,越等打怪不只容易死效率也不會比較高,建議剛入門的新手開發者可以先從 Unity 2D 教學系列 開始學習。而接下來的系列文章都會以「有經驗的開發者」為對象做描述。

 

--連線模式--

連線模式大至上可分為兩種

  • P2P點對點連線

P2P即為玩家與玩家兩台電腦間互相建立連線以達成多人連線的模式。在早期的單機遊戲、即時戰略、CS等單機射擊遊戲的多人連線上都是使用此種模式,最一目了然的地方在進行多人連線時必須「輸入對方IP」或是「建立房間、加入房間」,在早期也常有「房主LAG害大家LAG」的情況就是P2P連線所導致的。

在此種模式下的優點在於營運方不需承擔伺服器大量運算的成本,甚至不需要伺服器,邏輯運算全部丟給建立房間的房主,但在此種模式下由於邏輯運算掌握在玩家的電腦中,較容易被人開發外掛。

 

  • Server / Clinet 伺服器與客戶端連線

目前最常見的連線方式,一般線上遊戲如MMORPG或手機遊戲多採用此種連線方式,由Server端(伺服器端)中央集權,負責處理大多數的運算,Clinet端(客戶端)僅負責顯示畫面與特效,在這種模式下必須要承擔伺服器營運的風險,以及避免被攻擊、處理資安問題等等,但相對的Server端擁有最大權限去控制玩家的行為。

 

---撰寫---

該如何開始撰寫多人連線功能,大致可分為三個方向

  • UNet

Unity Networking 簡稱 UNet(應該吧),UNet是Unity在5.0後推出的新連線架構,取代了4.X版與更早期的連線架構,並整合了Unity雲端服務讓使用者更快速的實現多人連線功能,UNet包附在Unity之中不需要安裝任何外掛即可使用,雲端服務提供了最多100人同時在線的免費中繼伺服器。

在UNet只能以P2P方式連線,Unity官方提供了中繼伺服器可讓玩家建立房間、加入房間等等達成配對,由於是Unity原生的使用上非常快速方便。

  • Photon

Unity最強的多人連線外掛之一,有分為免費版與付費版本,功能強大且完整,不過筆者還沒有摸索Photon太多,未來有機會的話可以請令一位編輯ChaseWei大大撰寫幾篇Photon相關的文章。

  • Socket

何謂Socket? Socket是任何語言都通用的底層封包機制,擁有的功能便是最簡單的「建立連線」、「傳封包」、「發封包」,對於未來勵志要走向連線處裡的程式員都必定得熟悉他,但是從Socket開始撰寫就必須連「驗證機制」、「格式定義」、「掉包處理」等等都必須自行處理,筆者就是選擇從Socket自己刻連線機制而導致花了太多的時間在這上面,但對於想走向Server/Client模式的人這也是勢必要去學習的。

 

---結語---

在接下來的文章當中會以UNet為主要,會帶大家了解撰寫方式與如何實作一款多人連線遊戲。

本篇文章就到此,感謝您的閱讀。

 

[ UNet ] 基礎教學 #01 – 前置作業

 



相關文章

基礎教學 #02 – NetworkBehaviour NetworkBehaviour是在UNet中代替MonoBehaviour的基底類別。 要存取物件的網路資訊都必須透過NetworkBehaviour才能達成,因此在撰寫網路物件的新腳本時必須...
基礎教學 #01 – 前置作業 ---Unity 多人連線 UNet 教學 #01--- 為了教學上的方便,在UNet系列教學文中會使用2D專案做展示,會以讓大家「快速入門」為主要目標 在開始寫Code之前,我們必須先了解Uni...
基礎教學 #03 – SyncVar 資料同步 SyncVar是UNet中處理資料同步非常好用的功能,他的概念是「自動將Server變動的值同步至Client」,有了這個簡潔的功能我們才能快速建立起多人連線遊戲。 首先可以參考這段程式...
基礎教學 #06 – Spawn 卵生 在UNet中若要用程式碼生成物件,必須先和平常一樣用Instantiate生成物件,在透過「NetworkServer.Spawn」這個功能卵生到Client端。 也就是將一個存在於Se...