This document is about: FUSION 2
SWITCH TO

This page is a work in progress and could be pending updates.

Fusion 2 Introduction

概述

如需從Fusion 1.1到2.0的更改的清單,請查看這個頁面

Fusion是Unity的一個新的高性能狀態同步網路庫。Fusion在組建時考慮到了簡化性,可以自然地集成到普通的Unity工作流程中,同時也提供了先進的功能,如資料壓縮、客戶端預測和開箱即用的延遲補償。

本質上,Fusion依靠最先進的壓縮演算法,以最小的CPU額外負荷來減少頻寬要求。資料以部分區塊的形式傳輸,最終具有一致性。提供一個完全可設置的興趣區域系統,以支援非常高的玩家計數。

Fusion API設計為類似於常規Unity單行為程式碼。舉例而言,以方法上的屬性與單行為的屬性來定義RPC及網路狀態,而不需要明確的序列化程式碼,還有可以使用所有Unity的最近期的預製件功能,像是巢狀及變數,來定義網路物件為預製件。

輸入、已連網屬性及RPC提供了以Fusion來撰寫遊戲遊玩程式碼的基礎。

overview of the core fusion apis
核心Fusion API的概述

在Fusion中使用一個已連網屬性:

C#

[Networked] public int lives { get; set; }

針對客戶端側已預測移動來使用網路輸入:

C#

public override void FixedUpdateNetwork
{
    if (GetInput(out NetworkInputData data))
    {
        data.direction.Normalize(); // normalize to prevent cheating with impossible inputs
        _characterController.Move(5 * data.direction * Runner.DeltaTime);
    }
}

在Fusion中宣告一個遠端程序調用(RPC):

C#

[Rpc(RpcSources.InputAuthority, RpcTargets.StateAuthority)]
public void RPC_Configure(string name, Color color)
{
    playerName = name;
    playerColor = color;
}

選擇正確的模式

Fusion支援兩個根本上不同的網路拓撲,其附有相同的API以及沒有網路連線的單一玩家模式。

在以Fusion開始時,第一步是在伺服器/主機端模式及共享模式之間選擇。

Quadrant 提供一個好的起始點,來決定您的應用程式應該選擇哪個模式。

the quadrant

完整大小

教程

如果您已經想好要使用哪個模式,您可以使用以下教程來開始:

如果您還沒想好,請繼續閱讀!

拓撲的不同

fusion network topologies
Fusion網路拓撲

伺服器模式

在伺服器模式中,伺服器對於所有物件有完整及專屬的狀態授權,沒有例外。

客戶端只能透過發送它們的輸入到伺服器(並且讓伺服器回應該輸入),或透過使用一個RPC來請求一個更改,來調整已連網物件。

從Unity專案組建伺服器應用程式,其運行完整的無周邊Unity組建。這個無周邊組建需要在一個伺服器機器或一個雲端主機端伺服器上作為主機端。Photon不提供伺服器來作為一個專用Fusion伺服器應用程式的主機端。

客戶端側預測

客戶端側預測是一個熱門的多人玩家架構,在其中客戶端可以使用它們的輸入來預測它們自己的移動,同時等待來自伺服器的確認。這樣隱藏了延遲,並且讓遊戲遊玩的節奏明快。

在Fusion的伺服器模式,一個客戶端直接對已連網狀態做出的任何更改,只是一個本機預測,其將在接收到來自伺服器的實際授權快照後被其覆寫。這稱為核對,因為客戶端被復原到伺服器提供的狀態,並且被重新模擬轉傳到本機(已預測)刷新。

如果先前的預測是準確的,這個流程是無縫接軌。如果不準確,將會更新狀態,而因為網路狀態是分離於轉譯狀態之外,轉譯可以貼齊到這個新的狀態,或是使用各種形式的內插補點、錯誤修正及平順化來減少修正造成的視覺效果變形。

主機端模式

在主機端模式中,主機端作為伺服器及客戶端。主機端有一個本機玩家,針對它來輪詢輸入,並且根據客戶端的預期來內插補點轉譯。

總體而言,這個模式相等於伺服器模式,但運行起來要便宜得多,因為不發生專用伺服器主機端成本。然而,這是以狀態授權的可信度為代價——換句話說,不好的主機端有辦法作弊。

如果從防火牆或路由器後面運行主機端模式,Photon雲端會按需要透明地提供UDP穿通或封裝轉送。

因為主機端擁有遊戲階段,如果主機端中斷連線的話將遺失遊戲階段。Fusion提供一個主機端移轉機制,以在這種情形下來允許移轉狀態授權到一個新的客戶端,然而這 是自動在主機端模式中發生的(不像在共享模式中),並且需要在客戶端模式中的特殊處理。

共享模式

在共享模式中,針對網路物件的授權分佈在所有客戶端之間。具體而言,各個客戶端在最初時對其生成的物件擁有狀態授權,但可以自由將這個狀態授權釋放給其他客戶端。選擇性地,客戶端可以自由決定是否接收狀態授權。

諸如客戶端側預測及復原等功能在這個模式中不可用。模擬總是在所有客戶端上以相同的刷新率向前移動。

共享模式網路遊戲階段是由Photon雲端擁有,且在任何客戶端連線到它時就會維持活躍中。Photon雲端作為一個封裝轉送,可以完整存取到網路狀態而不需要運行Unity,這帶來輕量的伺服器邏輯及資料驗證(例如防作弊),它們在執行時不需要運轉專用伺服器硬體。

對於來自Photon Unity連網(PUN)的人,共享模式在許多方面相似,但功能更完整、更快,而且沒有運行階段配置額外負荷。

成本

相同的CCU成本適用於所有模式。伺服器及客戶端都必須在所有時間連線到Photon Cloud以進行連線管理。在伺服器模式中,有額外的成本以在一個雲端服務或您自己的硬體上以專用伺服器為主機端。

為何選擇Fusion?

還不確定要不要使用Fusion?請閱讀這個頁面以了解更多您應該使用Fusion而不只是Bolt及PUN的理由。

Back to top