NetworkManager
生活随笔
收集整理的這篇文章主要介紹了
NetworkManager
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
NetworkManager
NetworkManager是一個組件,用來管理網絡多人游戲的狀態。
NetworkManager所具備的屬性包括如下:
- 游戲狀態管理
- 派生管理
- 場景管理
- Debugging信息
- 比賽選擇(Matchmaker)
- 用戶自定義
使用NetworkManager
NetworkManager可以作為核心控制組件在多人在線游戲中。開始,創建一個空的游戲對象在你的場景開始,或選擇一個方便管理的對象。然后加入NetworkManager組件。
在編輯器的檢視面板允許您配置和控制很多事情與網絡有關。
NetworkManagerHUD是另一個組件,它需要跟NetworkManager一起工作。它給你提供了一個簡單的用戶界面,顯示游戲運行控制網絡狀態。這是好的開始使用一個網絡項目,但不是作為一個游戲的最終的UI。
游戲狀態管理
網絡多人游戲可以運行在三種模式——作為一個客戶,作為一個專用的服務器,或者作為“主機”(同時是客戶端和服務器)。連網是為了實現同樣的游戲代碼和資產在所有這些情況下工作。發展為單人的游戲版本和多人的游戲版本應該是一樣的。
網絡多人游戲可以運行在三種模式——作為一個客戶,作為一個專用的服務器,或者作為“主機”(同時是客戶端和服務器)。連網是為了實現同樣的游戲代碼和資產在所有這些情況下工作。發展為單人的游戲版本和多人的游戲版本應該是一樣的。
無論使用何種方法來改變游戲狀態,使用networkAddress和networkPort屬性。當服務器或主機啟動時,networkPort變得監聽端口。當客戶端啟動,networkAddress地址連接,networkPort端口連接。
?
派生(網絡實例化)管理
NetworkManager可以用于管理從預制實例化網絡對象。大多數游戲都有一個預設體作為主角對象,所以NetworkManager有一個位置使其拖動玩家預設體。當一個設置了一個玩家預設體,玩家對象將自動網絡實例化物體在每個用戶在游戲中。這適用于主機上的本地玩家,以及在遠程客戶端的遠程玩家。注意,玩家預設體必須添加NetworkIdentity組件。
除了玩家預設體之外,其他的預設體對象想動態地產生必須在ClientScene中注冊。這可以用ClientScene.RegisterPrefab()函數,也可以是由NetworkManager自動完成的。將預制體添加到列表中會讓他們被自動注冊。
一旦玩家預設體設置之后,應該能夠在開始游戲主機中看到玩家對象了。停止游戲應該看到玩家對象被銷毀。運行游戲的另一個副本和作為一個客戶端連接到localhost應該讓另一個玩家對象出現,和停止,客戶應客戶的player對象被銷毀。
玩家對象產生是調用了NetworkManager的默認方法:OnServerAddPlayer。如果你想定制玩家創建對象的方式,您可以重寫虛函數。默認實現是這樣的:
public virtual void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)
{
var player = (GameObject)GameObject.Instantiate(playerPrefab, playerSpawnPos, Quaternion.identity);
NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
}
注意NetworkServer.AddPlayerForConnection()函數必須用于創建新的玩家對象,這樣就建立了與客戶端的聯系。這將生成對象,所以NetworkServer.Spawn 不需要在玩家物體上調用。
場景管理
大多數游戲有多個場景。通常在屏幕至少有一個標題或開始菜單場景添加到實際的游戲場景中。NetworkManager設置了自動管理場景狀態和場景切換方式功能適用于一個多人游戲。NetworkManager有兩個槽,offlineScene和onlineScene。將場景拖到槽中可以激活網絡場景管理功能。
當服務器或主機啟動時,onlineScene場景將被加載。這將成為當前網絡場景。任何連接到服務器的客戶端也會加載這個場景。這個場景的名稱存儲在networkSceneName屬性中。
當網絡停止時(服務器或主機停止了),或由客戶端斷開,離線場景將被加載。這使得游戲斷開時自動回到菜單場景。
我們還可以在游戲中更改場景,通過調用方法NetworkManager.ServerChangeScene()。這將使所有當前連接的客戶端的變化場景,并將更新networkSceneName這樣新客戶也會加載到新場景。
當網絡場景管理激活時,任何調用游戲狀態管理功能會導致場景的變化,例如:NetworkManager.StartHost()或NetworkManager.StopClient(),這適用于運行時控制UI。通過設置場景和調用這些函數很容易控制多人在線游戲的場景同步。
注意,場景變化導致所有場景中的對象被銷毀。這可能包括NetworkManager!如果你想使其在場景切換過程中不銷毀,確保勾選“Dont Destroy On Load”設置為true。在簡單的情況下,這是最好的配置。但是,可以使其在每一個場景都有不同的NetworkManager來控制增量加載預制,或不同的場景轉換。
調試信息
NetworkManagerHUD屬性面板顯示網絡在運行時的狀態額外的信息。這包括:
- 網絡連接
- 服務器端:NetworkIdentity激活的對象
- 客戶端:NetworkIdentity激活的對象
- 同時在線客戶端
比賽安排(Matchmaking)
NetworkManager運行時UI和NetworkManager檢視面板UI允許與matchmaker server交互。函數NetworkManager.StartMatchmaker()使連接,并保存在NetworkManager.matchmaker屬性中。一旦被激活時,會改變默認的UI并執行回調函數使其簡單的完成matchmaking。
可以繼承NetworkManger重寫虛方法,實現自定義回調。
用戶自定義(Customization)
繼承NetworkManager之后用戶可以根據需要重寫很多虛方法。重寫這些方法時,一定要注意方法原本實現的內容。例如,OnServerAddPlayer()函數, 必須調用方法NetworkServer。AddPlayer實現玩家對象的連接。
服務器/主機上調用的方法有:
在客戶端調用的方法:
Matchmaker會調用的方法:
===================================================================
?
轉載于:https://www.cnblogs.com/dragonz001/p/9885611.html
總結
以上是生活随笔為你收集整理的NetworkManager的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker:单机编排工具docker-
- 下一篇: 免费的编程中文书籍索引(2018第三版)