天天看點

[Unity Mirror] General

  Mirror 是一個為 Unity 遊戲建構多人遊戲功能的系統。它建立在較低級别的傳輸實時通信層之上,并處理多人遊戲所需的許多常見任務。傳輸層支援任何類型的網絡拓撲,而 Mirror 是伺服器權威系統;雖然它允許參與者之一同時是用戶端和伺服器,是以不需要專門的伺服器程序。與網際網路服務一起工作,這使得多人遊戲可以在網際網路上玩,而開發人員幾乎不需要做任何工作。

  Mirror 專注于易用性和疊代開發,并為多人遊戲提供有用的功能,例如:

  • 消息處理程式
  • 通用高性能序列化
  • 分布式對象管理
  • 狀态同步
  • 網絡類:伺服器、用戶端、連接配接等

Mirror 由一系列添加功能的層建構而成:

[Unity Mirror] General

Server 和 Host

Mirror多人遊戲包括:

  • Server

    伺服器是所有其他玩家想要一起玩時連接配接到的遊戲執行個體。伺服器通常管理遊戲的各個方面,例如記分,并将該資料傳輸回用戶端。

  • Clients

    用戶端是遊戲的執行個體,通常從不同的計算機連接配接到伺服器。用戶端可以通過本地網絡或線上連接配接。

  用戶端是連接配接到伺服器的遊戲執行個體,是以玩它的人可以與連接配接到自己用戶端的其他人一起玩遊戲。

  伺服器可能是一個“專用伺服器(Dedicated server)”或“主機伺服器(host server)”。

  • 專用伺服器(Dedicated server)

    這是一個僅作為伺服器運作的遊戲執行個體。

  • 主機伺服器(host server)

    當沒有專用伺服器時,其中一個用戶端也扮演伺服器的角色。該用戶端是“主機伺服器”。主機伺服器建立遊戲的單個執行個體(稱為主機),它既充當伺服器又充當用戶端。

  下圖代表多人遊戲中的三個玩家。在這個遊戲中,一個用戶端同時充當主機,這意味着用戶端本身就是“本地用戶端”。本地用戶端連接配接到host伺服器,并且都在同一台計算機上運作。另外兩個玩家是遠端用戶端——也就是說,他們在不同的計算機上,連接配接到host伺服器。

[Unity Mirror] General

  Host是遊戲的單個執行個體,同時充當伺服器和用戶端。主機使用一種特殊的内部用戶端進行本地用戶端通信,而其他用戶端是遠端用戶端。本地用戶端通過直接函數調用和消息隊列與伺服器通信,因為它在同一個程序中。它實際上與伺服器共享場景。遠端用戶端通過正常網絡連接配接與伺服器通信。當您使用 Mirror 時,這一切都會自動為您處理。

  多人系統的目标之一是本地用戶端和遠端用戶端的代碼相同,以便您在開發遊戲時大部分時間隻需要考慮一種類型的用戶端。在大多數情況下,Mirror 會自動處理這種差異,是以您應該很少需要考慮在本地用戶端或遠端用戶端上運作的代碼之間的差異。

執行個體化和生成

  在 Unity 中制作單人遊戲時,通常使用 GameObject.Instantiate 方法在運作時建立新的遊戲對象。但是,對于多人遊戲系統,伺服器本身必須“spawn”遊戲對象,以便它們在網絡遊戲中處于活動狀态。當伺服器生成遊戲對象時,它會觸發在連接配接的用戶端上建立遊戲對象。spawn系統管理遊戲對象的生命周期,并根據您設定遊戲對象的方式同步遊戲對象的狀态。

  有關網絡執行個體化和生成的更多詳細資訊,請參閱 Spawning GameObjects 文檔。

玩家和本地玩家

  Mirror 處理玩家遊戲對象與非玩家遊戲對象的方式不同。當新玩家加入遊戲時(當新用戶端連接配接到伺服器時),該玩家的遊戲對象成為該玩家用戶端上的“本地玩家”遊戲對象,并且 Mirror 将玩家的連接配接與玩家的遊戲對象相關聯。 Mirror 為每個玩遊戲的人關聯一個玩家遊戲對象,并将網絡指令路由到該單獨的遊戲對象。一個玩家不能在另一個玩家的遊戲對象上調用指令,隻能調用他們自己的。

有關更多詳細資訊,請參閱有關 Player GameObjects 的文檔。

權限(Authority)

  伺服器和用戶端都可以管理遊戲對象的行為。 “權限”的概念是指遊戲對象的管理方式和位置。Mirror基于“伺服器權限”作為預設狀态,伺服器對所有遊戲對象具有權限。玩家遊戲對象是一種特殊情況,被視為具有“本地權限”。您可能希望使用不同的權限系統來建構您的遊戲 - 有關更多詳細資訊,請參閱網絡權限。

繼續閱讀