1. 程式人生 > >Unity3d學習記錄之UNet網路模組

Unity3d學習記錄之UNet網路模組

學習來源:

聯機遊戲可增加遊戲的可玩性和競技性,所以一款好的聯機遊戲將會帶來很多樂趣。

Unity自帶一個簡單的網路模組UNet,可將單人遊戲改成多人聯機遊戲。

將單人遊戲轉換為Unity多人遊戲的步驟:

①:給遊戲增加網路管理NetworkManager和NetworkManagerHUD

NetworkManager用於管理整個網路遊戲,NetworkManagerHUD是為了簡單測試聯機遊戲,而後的網路連線端UI可自行編寫。

Show Runtime GUI  :

顯示執行時GUI 勾選此複選框可在執行時顯示網路管理器HUD GUI。這允許您顯示或隱藏它以便快速除錯。

②在玩家預製體身上新增NetworkIdentity元件(網路標誌),用於是在服務端控制還是客戶端(本地)控制。網路遊戲物體必須攜帶!

新增NetworkTransform元件,同步其物理性質。在操作玩家時的指令碼需將繼承類改成NetworkBehavior,使用網路模組的類。為了區分玩家操控,需用IslocalPlayer來對程式碼進行判斷,因為在網路遊戲中所獲得到的除自己以外的物體,全部都是通過服務端進行同步,所以當使用了IslocalPlayer判斷是否為本地客戶端的玩家操作,就可以進行本地操控,而不是同時操控全部玩家。

Server Only:

僅限伺服器

勾選此複選框以確保Unity僅生成伺服器上的GameObject,而不是客戶端上的GameObject。

Local Player Authority:

本地球員管理局 勾選此複選框可將此GameObject的權威網路控制權提供給擁有它的客戶端。該客戶端上的玩家GameObject擁有對它的許可權。其他元件(如Network Transform)使用此選項來確定將哪個客戶端視為許可權來源。

③處理非玩家物體

物體本身需要新增NetworkIdentity和NetworkTransform元件,且需要在NetworkManager下進行註冊。

玩家預製體則在Player Prefab上註冊,而剩餘的生成物體則需要在Registered Spawnable Prefabs中註冊。

修改spawner僅在伺服器上執行(使用isServer屬性或OnStartServer()函式)且用NetworkServer.Spawn()進行同步建立的物體。

is Server屬性可將某函式僅在伺服器中呼叫,OnStartServer()函式是在服務端開始時呼叫(Awake)。

④玩家的出生位置處理

需要新增NetworkStartPosition元件用於生成玩家位置。

⑤房間系統(進入遊戲介面之前的場景)

建立空物體並在上面新增Network Lobby Manager元件

Lobby  Scene:用於顯示房間的場景(遊戲介面場景)

Play Scene:遊戲場景

Lobby Player Prefab:進入房間場景中的玩家預製體(需要新增Network Lobby Player元件

Game Player Prefab :進入遊戲的的玩家預製體

自此,一個簡單的多人遊戲網路框架大概就知道了。但如何從客戶端與服務端進行互動,這才是網路遊戲的重點也是難點。

可在指令碼中新增[Commad]屬性,將某函式(需以Cmd開頭)變成從客戶端呼叫,從服務端執行。

[ClientRpc]屬性,將某函式(需以Rpc開頭)變成從服務端呼叫,從客戶端執行。

[SyncVar]屬性,在當前幀結束前傳送給客戶端,同步各機理。