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 Interest
API,只同步所需的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用於透過已同步方式切換/載入場景 |