This document is about: FUSION 2
SWITCH TO

What's New

Fusion 1作為業界領先的狀態同步SDK,將Bolt最好的基於刷新的網路程式碼與PUN基於雲端的便利性相結合,因而樹立了很高的標準。這種獨特的架構使Fusion能夠覆蓋各種遊戲類型,再加上其驚人的CPU和頻寬使用,使其成為真正的新一代網路SDK。

Fusion 2在此基礎上為現有API帶來了新功能和高品質更新。此外,Fusion內核的大部分都進行了重寫,以改進和精簡它。我們針對各種系統進行了全面的更改,包括資料傳輸、時間同步、記憶體管理和總體CPU效能。

本頁概述了我們對Fusion 2所做的更改。

重新設計的興趣管理系統

新系統的效能要高得多,現在每當物件進入/退出客戶端的興趣集時,新系統都會提供可靠的進入/退出回調。

當網路物件進入/退出給定玩家的AOI區域時,以及當玩家明確對被新增或移除的物件感興趣時(使用Runner.SetPlayerAlwaysInterested()),就會觸發這些回調。在伺服器、主機端和共享模式,在伺服器上可靠地計算回調。

我們也有NetworkObject/NetworkBehaviour.ReplicateTo API,其允許對哪些行為複製到哪些客戶端進行精細的動態控制。

在代理上的固定更新網路

FixedUpdateNetwork預設下不再在代理上執行。(代理是客戶端上的網路物件,客戶端不在其上持有輸入授權。)

由於大多數應用程式不需要模擬代理,因此這個更改降低了總體CPU使用率。對於 需要 這樣做的情況(例如使用已預測物理時),可以設定代理來模擬及叫用FixedUpdateNetwork回調,方法是:

C#

networkRunner.SetIsSimulated(networkObject, true);

新的時間同步

Fusion 2改進了其系統,該系統控制客戶端預測的程度以及轉譯前緩衝伺服器快照的時間長度。這個新系統仍能順利適用於不斷變化的網路狀況,但比Fusion 1.1更快、更可靠。

設定也更簡單、更有意義。客戶端在預測方面的領先優勢和緩衝快照所花費的時間都各自來自兩種設定——目標封包遺失和額外的靜態偏移。客戶端將對最近的網路狀況進行採樣,並動態調整其伺服器在前的距離,以讓網路抖動只會導致指定的封包遺失。如果抖動增加,客戶端將更進一步預測。如果抖動再次減少,客戶端將回落到較小的在前的距離。靜態偏移基本上只是提供了更多的「傳送嘗試」。

例如,如果約1%的客戶端輸入延遲到達伺服器是可以接受的,但也希望每個輸入都有第二次機會可以按時到達(以防第一個封包遺失),則可以同時設定TimeSyncConfiguration.MaxLateInputsTimeSyncConfiguration.ExtraSimulationOffset1

共享模式

共享模式現在也依賴於客戶端之間精確的刷新貼齊資料。

這允許使用Runner.Tick,以參照客戶端之間的特定刷新,這意味著共享模式現在支援TickTimer

基於刷新的共享模式現在也使用與伺服器模式相同的精確快照內插補點,提高了視覺效果準確性和感知延遲。

更改偵測

Fusion 2引入了一種新的更改偵測API,它不僅允許您偵測Render中的變化,還允許您偵測FixedUpdateNetwork中的變化以觸發遊戲遊玩邏輯。

建立一個ChangeDetector就像這樣:

C#

 _changes = GetChangeDetector(ChangeDetector.Source.SimulationState);

然後調用ChangeDetector.DetectChanges(比如在FixedUpdateNetworkRender中),以偵測自上次叫用以來發生的任何更改。

新的已連網資料存取系統

新的API允許直接存取底層網路資料緩衝區。使用TryGetSnapshotsBuffers存取快照緩衝區。有一些函數可用於讀取資料,也有一些輔助函數可用於對資料進行內插補點以進行自訂內插補點。

內插補點目標

使用Fusion 1很難正確處理內插補點目標,尤其是在為網路物件設定上層時。Fusion 2簡化了內插補點,因此在使用NetworkTransform時不再需要內插補點目標。取而代之地,帶有NetworkTransform元件的Unity Transform是直接被內插補點。

網路轉換改進

NetworkTransform現在將其TRS資料(位置/旋轉/比例)存儲在本機空間中。這意味著:

  • 下層與巢狀NetworkTransform的資料更加高效。
  • 但是,興趣區域位置對巢狀網路物件不再有效。已引入興趣區域覆寫以解釋這一點,並允許網路物件指定另一個網路物件位置以用於確定玩家興趣。

同步轉換的本機比例現在是選擇性的。

同步網路物件的上層現在是選擇性的。有效的網路行為必須存在於上層轉換上,並且NetworkTransform必須位於網路物件的根上。

網路物理

網路剛體和網路物理模擬已從Fusion DLL中移除,取而代之的是Unity物理附加元件,它包含在Fusion SDK的主要下載中。現在可用的有僅用於服務器的完整功能集和完整預測物理。

透過源程式碼提供物理附加元件,讓您可以修改和擴展它以滿足您的專案需求。這在VR遊戲等複雜使用案例中使用物理時提供了更大的靈活性。雖然NetworkTransform在Fusion 2中移除了其內插補點目標要求,但網路剛體仍然具有內插補點目標屬性。但是,內插補點目標僅用於非常特定的使用案例,並且通常可以保留為空值(表示剛體轉換將被移動以進行內插補點)。

VR輸入模式

一種為VR遊戲設計的新輸入傳輸模式。預設下,Fusion使用不可靠的傳輸將輸入從客戶端發送到伺服器。為了減少封包遺失,在每個輸入封包中包含了過去輸入的小段歷史。這允許伺服器使用完整的輸入流進行運作,即便遺失了幾個單獨的封包,但它增加了輸入封包的大小。

VR輸入模式只發送最新的輸入狀態,以大幅降低VR遊戲的頻寬,這些遊戲具有包含頭部/手部位置資料的大型輸入架構。

要啟用此功能,請在NetworkProjectConfig中將Input Transfer Mode設定為Latest State

加密

目前尚未出現在候選版本中,但將出現在發布版本中。

Fusion 2引入了無縫的端到端加密,確保了遊戲遊玩流量的安全性。該加密系統涵蓋了客戶端和Photon Cloud之間的通信,其建立在現有的Realtime SDK之上。Fusion 2的主要新增功能是對客戶端和伺服器之間交換的資料進行自動加密,使流程變得輕鬆,只需啟用該功能即可。無論是在共享模式還是客戶端-伺服器模式下,Fusion 2都會對同儕節點之間傳輸的整個資料封包進行加密,為強化安全性提供了強大的加密解決方案。

簡單KCC

透過簡單KCC,我們為Fusion添加了一個對使用者友好、直觀的3D角色控制器附加元件。它旨在使用Fusion簡化遊戲中角色移動的設定。

與Unity CharacterController相比,它提供了更多功能,並完全支援所有多人玩家使用案例,因此您可以在共享、主機端和伺服器模式下使用它。

Simple KCC

新的堆積系統

Fusion 2提供了一個新的內部堆積,它可以動態地預先分配記憶體。新的堆積允許對Fusion使用的內部未管理記憶體進行洩漏偵測和垃圾收集。

統一資料傳輸模型

Fusion 1提供了兩種資料傳輸模型:差量快照和最終一致性。兩者都有各自的使用案例,但我們發現,透過專注於單個模型,我們可以在幾乎所有使用案例中提供更高效的CPU和頻寬的資料傳輸。

Fusion中新的最終一致性模式不僅比以前的版本有很多效能改進,而且在預設下確保單個NetworkObject上的所有Networked Property更新都在同一刷新到達客戶端,從而在針對各個物件的基礎上提供一致的刷新準確資料。對於傳統的針對各個屬性的最終一致性傳輸,您可以設定SimulationConfig.ObjectDataConsistencyEventual

場景管理

為了開箱即用支援更多案例,場景管理已經被完全重寫。它現在可以作為Unity的場景管理器的替代品,使您能夠在此基礎上組建更精細的場景轉換。

不再需要為可定址場景編寫自訂支援。只需將FusionScenes可定址標籤新增到可定址場景資產中,Fusion就會自動辨識它。

額外場景載入已準備就緒!新的NetworkSceneInfo最多可同時支援8個場景。可在單一和多重同儕節點模式下工作。

使用版本控制,可以讓客戶端重新載入場景,只需從SceneAuthority中移除所需場景,然後再次新增它或以Single模式載入它即可。

除此之外,物件現在可以生成為DontDestroyOnLoad,即使在具有額外場景的多重同儕節點模式下也可以。

Fusion 2應用程式帳號

Fusion 2應用程式需要在Photon儀表板上明確建立Fusion 2應用程式帳號。

請閱讀Fusion共享模式基礎 - 建立應用程式帳號教程以取得更多資訊。

新的示範選單

新的示範選單允許您提供用於原型設計的範本選單來啟動Fusion開發。

它展示了許多常用的功能,如隨機配對和透過分享一個對手碼來進行的基於對手的配對。

它被設計為可擴展的,並處理連線邏輯的複雜性。雖然這些設計目標相互競爭,但這種解決方案試圖合理地平衡它們。

Fusion 2 Demo Menu
Fusion 2 Demo Menu
Fusion 2 Demo Menu
Fusion 2 Demo Menu
Fusion 2 Demo Menu
Fusion 2 Demo Menu

延遲補償

不再需要將動畫命中盒放在Render之前,以使它們處於正確的位置以進行延遲補償。延遲補償系統現在自動使用Render中的正確內插補點動畫位置,該位置與玩家在螢幕上看到的位置相匹配。

延遲補償現在也支援2D使用案例,並允許對2D物理場景進行査詢。

此外,現在也支援3D膠囊命中盒。

網路物件提供器

INetworkObjectPool已被替換為INetworkObjectProvider,提供了更一致、更完整的API。預設執行方式現在能夠非同步載入和生成物件。

為了容納這些新功能,新增NetworkRunner.TrySpawn和一個可等待的NetworkRunner.SpawnAsync方法。無需再以WaitForCompletion預先載入或等待可定址!

未使用的可定址預製件現在可以在它們的執行個體計數達到零後立即卸載,或者由使用者決定使用NetworkRunner.Prefabs.UnloadUnreferenced卸載。

以上所有內容現在都可以在NetworkPrefabsInspector視窗中進行驗證,該視窗允許檢查哪些網路預製件已經被載入、生成以及它們的執行個體計數為何。

發送可靠資料

重新設計了可靠的資料流程API,帶來了許多新的高品質改進。它自動將資料分割成片段,這些片段串流傳輸到目標客戶端並重新組裝。一旦接收到完整的資料,就會叫用帶有資料的回調。提供了另一個回調來追蹤資料傳輸的狀態。

範例程式碼:

C#

byte[] largeData = new byte [10000];

// Provide 4 numbers as a unique key for the data
var key = ReliableKey.FromInts(42, 0, 0, 0);

// Use in shared mode or as the server/host to send data to players
runner.SendReliableDataToPlayer(playerRef, key, largeData);

// Use as a client to send data to the server/host
runner.SendReliableDataToServer(key, largeData);

接收資料的回調(I網路運行器回調):

C#

public void OnReliableDataReceived(NetworkRunner runner, PlayerRef player, ReliableKey key, ArraySegment<byte> data){}

public void OnReliableDataProgress(NetworkRunner runner, PlayerRef player, ReliableKey key, float progress){}
Back to top