unity-開發進階之網絡通訊UNET

    unity在5.1版本之後更新了全新的多人在線網絡工具,叫Unity Networking,簡稱UNET,此項技術開發者可以從傳輸層傳輸數據。通常,unity把開發者分爲兩種,一種是不是很懂網絡知識的,只需要最小的代價完成多人聯網功能,這類用戶應該去使用NetworkManager或High Level API (HLAPI),第二類用戶需要建設大型網絡遊戲,,需要強大且靈活的網絡工具,這類用戶需要去使用NetworkTransport API (LLAPI)

    授權服務器:承擔着遊戲世界的模擬運算,所有遊戲規則,以及處理用戶端的輸入,將輸入信息發送給服務器端,並持續接受服務端的傳輸過來的遊戲狀態。 這個過程可以簡單的看作:

 客戶端反饋玩家當前狀態信息給服務端->服務端處理接受的狀態信息->反饋各個客戶端用於更新遊戲世界的數據。

這種方法優勢是避免了客戶端的欺詐行爲,這種情況下要求服務端的處理能力很強大,因爲服務器要處理每個用戶的輸入。

    非授權服務器:並不控制客戶端每個用戶的輸入和輸出,客戶端本身處理玩家的輸入和本地客戶端的遊戲邏輯,然後發送確定的行爲結果給服務端,服務端同步這些操作到遊戲世界裏。

    網絡通信有兩種重要的方式:遠程函數調用與狀態同步。

遠程函數調用:

    簡稱RPC,它是用來調用遠程計算機上某個函數的方法,包括:客戶端調用服務端上某個函數;服務端調取所有客戶端的某個函數或特定客戶端的函數。

狀態同步:

    被用於各個客戶端中同步不斷改變的數據。例如,客戶端玩家跑步、跳躍或者釋放技能,其他客戶端能夠確切知道該玩家的位置,在幹嘛。因此,狀態同步需要大量的帶寬消耗,所以開發者應盡力去優化。

HLAPI:

    這種網絡系統需要一個服務器端,如果有專用服務器,那就很好,如果沒有,某一個客戶端可以作爲服務器的角色,此客戶端也被稱爲host(主機),host的客戶端和服務器端在統一進程裏,使用的是叫做LocalClient的特殊客戶端,其他客戶端叫做Remote Client。由於host客戶端和服務端在同一進程裏,且共用同一場景,所以Local Client與服務端通過直接函數調用和消息隊列進行通訊,當然這樣幾乎沒有延遲,其他客戶端就需要通過普通的網絡連接和服務端進行通信了。

    網絡系統中,玩家對象都是專有的,一個人不能去調用另一個人的玩家對象,不然就亂套了。因此有了Myplayer。

Transport layer API:

    基本服務包括:

    建立連接

    使用多種服務水平的通信

    流量控制

    統計數據

    通過中繼器或本地發現的額外服務器進行通信

使用兩種協議:通用通信UDP和用於webGL的webScokets。通常大型遊戲都是用UDP來傳輸數據,速度快,允許丟包。

工作流程爲

    初始化網絡傳輸層。

    配置網絡拓撲。

    創建服務器端主機。

    開始通信(處理連接和發送/接收消息)

Internet Services


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章