Coming from Bolt
概述
本文檔將描述Photon Bolt和Photon Fusion在API方面的主要差異,以及如何將用Bolt編寫的遊戲部分移植到Fusion專案中。
Bolt和Fusion有很多共同的概念,但用法、API以及主要的一般行為有所不同。
Fusion模式
從Bolt到Fusion,有一點非常重要,就是Bolt只提供伺服器/主機端拓撲,而Fusion提供了一個完全由客戶端授權的額外共享模式(類似於Photon Unity網路)。
Bolt中存在的大多數概念都可以轉移到Fusion主機端/伺服器模式,但不能轉移到共享模式。
本頁介紹如何將您的Bolt知識轉移到Fusion伺服器/主機端模式。
差異
以下是Photon Bolt和Photon Fusion之間的所有主要差異的清單:
- 在Bolt上,可以透過Fusion中的靜態類別
BoltNetwork和BoltMatchmaking存取通用API,Fusion使用NetworkRunner的執行個體來完成。 - Fusion可以從同一個可執行來運行多個同儕節點,而Bolt只能運行一個。這意味著可以從同一個遊戲執行個體來運行多個客戶端。這對於測試和偵錯非常有用。
- Fusion透過使用內建的
NetworkRigidbody和NetworkRigidbody2D元件,來完全支持物理預測和回調,在Bolt上,這需要由開發人員處理/執行。這同樣適用於處理Character Controller時,Fusion有一個開箱即用的NetworkCharacterController作為移動玩家角色的基本執行方式,而在Bolt中,它也需要一個自訂執行方式。
相似處
以下列出了Photon Bolt和Photon Fusion之間的所有主要相似處:
- Fusion有一個
NetworkObject的概念,它代表了一個具有網路屬性的UnityGame Object,用於在同儕節點之間同步資料,Bolt在BoltEntity的名稱下也有同樣的概念。NetworkObject的狀態可以在任何使用Networked屬性的NetworkBehaviour上進行描述,為了在Bolt上進行描述,有必要使用Bolt Assets視窗建立/編輯State資產來建立及設置屬性。更多資訊在這裡。 - 所有主要的SDK事件(啟動、關閉、中斷連線等)都在Bolt中使用
GlobalEventListener的執行個體進行處理,Fusion透過與NetworkRunner關聯的INetworkRunnerCallbacks的執行方式公開了這類事件。 - 這兩個SDK都有
State Authority和Input Authority的概念,雖然在Bolt上被稱為Ownership和Control,但它們的含義完全相同。更多資訊在這裡。 - Fusion也是一個預測-復原系統,類似於Bolt。雖然在Bolt中有
BoltEntity的Controller發送的Command,但在Fusion中,這是透過對NetworkObject具有Input Authority的同儕節點發送NetworkInput來完成,但與Bolt不同,Bolt中的復原(狀態重新設定)是手動完成的(在具有resetState = true的ExecuteCommand內),Fusion中這是在調用FixedUpdateNetwork方法之前自動處於新幀的開頭。 - 對於每個被控制的
BoltEntity,Bolt都會在與Entity關聯的各個EntityEventListener上調用SimulateController方法。這在Fusion上是不同的,因為沒有多個NetworkInput源(Bolt上的Command),並且對於所有NetworkObjects,只有1個NetworkOutput可以與特定的Frame相關聯。這是透過INetworkRunnerCallbacks.OnInput回調的執行方式來完成的。更多資訊在這裡。 - Fusion上知名的遠端過程調用(
RPC)在Bolt上被稱為Events。它們具有非常相似的控制(誰可以發送,誰可以接收,以及可靠性),但可以透過Fusion上的程式碼直接定義,而在Bolt中,需要使用Bolt Assets視窗設定它們。更多資訊在這裡。 - Fusion有很多內建元件,有助於同步常見類型的資料,其中一個例子是
NetworkTransform,它可以映射到Bolt上的Transform Property。兩者都用於同步Game Object的位置和旋轉,同時提供快照之間的平滑過渡,能夠在資料點之間進行內插補點。更多資訊在這裡。 - Fusion也能夠使用
Area of InterestAPI,只同步所需的NetworkObject集合。更多資訊在這裡。 - 在這兩個SDK上都有
Scene Object的概念,它是與場景相關聯的預先建立的NetworkObject。載入特定場景後,這些對物件會自動新增到模擬中。 - 在這兩個SDK上執行的另一個解決方案是
Lag Compensated Physics Checks,主要用於偵測與射線投射的碰撞,其考量射手和目標之間的延遲。更多資訊在這裡。
參照表
| Bolt | Fusion | 說明 |
|---|---|---|
| Bolt網路、Bolt配對 | 網路運行器 | 主要API進入點 |
| Bolt實體 | 網路物件 | 代表一個已連網遊戲物件 |
| Bolt實體狀態屬性 | 已連網屬性 | 已同步屬性的集 |
| 全域事件接聽器GlobalEventListener | I網路運行器回調 | 一般事件處理 |
| 實體事件接聽器 | 網路行為, | 已連網遊戲物件處理 |
| BoltNetwork.Instantiate() | NetworkRunner.Spawn() | 建立一個新的已連網遊戲物件 |
| BoltNetwork.Destroy() | NetworkRunner.Despawn() | 從模擬移除一個已連網遊戲物件 |
| BoltEntity.IsOwner | NetworkObject.HasStateAuthority | 如果同儕節點可以調整一個已連網遊戲物件的狀態的話的信號 |
| BoltEntity.HasControl | NetworkObject.HasInputAuthority | 如果同儕節點可以推送輸入到一個已連網遊戲物件的狀態的話的信號 |
| 命令 | 網路輸入 | 用於在客戶端上預測及在伺服器上修正狀態的控制架構 |
| 物件 | 網路架構 | 可重複使用的資料架構,其含有已連網屬性,並且可以用在超過一個狀態中 |
| 事件 | RPC | 用於不需要作為模擬的一部分的資訊傳輸的通信方法 |
| 轉換屬性 | 網路轉換 | 內建支援一個已連網遊戲物件的同步轉換(位置及旋轉) |
| BoltNetwork.LoadScene | 網路場景管理器 | API用於透過已同步方式切換/載入場景 |