This document is about: FUSION 2
SWITCH TO

What's New in 2.1

Fusion 2.1 包含許多新功能和改進。本頁將詳細說明最重要的變更。有關 Fusion 2 和 1 之間的變更清單,請參閱2.0 版本新功能

預測物理系統(Forecast Physics)

預測物理系統提供了一種替代全模擬物理預測的方式,可在大幅降低 CPU 成本的情況下,實現具有即時物理互動的物理遊戲。

Advanced Forecast Vehicle Physics Screenshot

預測物理系統在 主機、伺服器和共用模式 中可用。

它使用外插法將物理物件放置在所有玩家的本地時間中。這樣一來,所有用戶端都能平穩地與其互動。

有關更多資訊,請參閱文件頁面

物件傳送優先級(Object Send Priority)

物件傳送優先級可控制物件的更新頻率。在 Fusion 2.0 及更早版本中,每個同步的網路化屬性都會在可能的情況下每個傳送滴答週期進行同步。在 Fusion 2.1 中,可以使用物件傳送優先級降低傳送速率。

  • 優先級為1的物件表示每個刷新週期都會更新.
  • 2表示每隔一個刷新週期更新一次,導致傳送速率為 tickRate/2。
  • 3表示每隔三個刷新週期更新一次,導致傳送速率為 tickRate/3,依此類推。

每位玩家的優先級(Per Player Priority)

可以調整物件對特定玩家的傳送速率。

例如,這可用於根據物件與玩家的距離調整其優先級,除了使用關注區域(Area of Interest)隱藏物件外,還提供了另一種減少遠處物件頻寬的方法。

每位玩家的優先級在 主機、伺服器和共用模式 中可用。

要為特定玩家設定優先級,請呼叫:

C#

NetworkObject.SetPriority(PlayerRef player, int priority)
  • 主機 / 伺服器 模式中,主機 / 伺服器控制優先級,必須為每個玩家 - 物件對設定優先級。
  • 共用模式 中,每個用戶端控制其接收的物件的傳送速率。因此,只有使用本地PlayerRef (NetworkRunner.LocalPlayer)呼叫SetPriority有效

要清除優先級(將再次使用全域優先級),請使用:

C#

NetworkObject.ClearPriority(PlayerRef player)

主機和伺服器模式 中,NetworkObject 上有一個回呼,在首次考慮向玩家傳送物件數據時調用。實現此回呼可確保始終為物件設定每位玩家的優先級:

C#

public void Awake()
{
    Object.SendPriorityCallback += PriorityCallback;
}

public void OnDestroy()
{
    Object.SendPriorityCallback -= PriorityCallback;
}

public int PriorityCallback(NetworkObject obj, PlayerRef player)
{
    int priority = 1; // Add your implementation here
    return priority;
}

使用較低的傳送速率 / 較高的優先級

通過提高傳送優先級來降低傳送速率,可能會導致物件更新的頻率過低,以至於物件的渲染時間線可能在新更新到達之前結束。

這可能導致 不穩定的運動。為減輕此問題,您可能需要使用NetworkProjectConfig.TimeSynchronizationOverride調整時間設置。

共用模式可配置的關注區域(Shared Mode Configurable AOI)

在共用模式中,可以在NetworkProjectConfig中調整關注區域單元的大小和網格的大小。在 Fusion 2.0 及更早版本中,這固定為 32 單位。

AOI Config

大型數據遠程過程調用(Large Data RPCs)

Fusion 2.1 不再限制 RPC 大小為 512 位元組。

要傳送超過 512 位元組的 RPC,可以在 RPC 屬性中指定RpcChannel.ReliableLargeData

C#

[Rpc(Channel = RpcChannel.ReliableLargeData)]
public void RpcExample(byte[] data)
{
    Debug.Log("Large RPC received");
}

  • 大型 RPC 不具備刷新週期精確性。
  • 大型 RPC 的順序不保證。

改進的主客戶端切換(Improved Master Client Switching)

如果主客戶端變得無回應但未完全斷開連接,客戶端可以手動請求重新分配主客戶端。這可以大大加快主客戶端的切換速度。

要啟用此功能,請在NetworkProjectConfig中啟用AllowMasterClientReassignRequest。預設情況下,有一個 2 秒的重新分配閾值。這是當前主客戶端無回應(Photon Cloud 未收到任何消息)的時間(以秒為單位)。可以通過NetworkProjectConfig中的MasterClientReassignRequestThreshold值調整此閾值。

MasterClientReassignRequestThreshold設為0允許任何客戶端隨時接管成為主客戶端,即使當前主客戶端仍然有回應。這可能會被惡意客戶端(黑客)濫用,以接管現有的會話。

當主客戶端無回應時,主客戶端切換不會自動發生(僅在完全斷開連接時發生)。需要來自另一個客戶端的手動請求。任何客戶端都可以使用以下方式發送請求:

C#

NetworkRunner.RequestMasterClientReassign();

要檢測主客戶端是否處於非活動狀態,客戶端可以檢查主客戶端是否正在更新網路化屬性。如果沒有現有的屬性每個滴答週期都在更新,可以添加一個自定義跟蹤器。一個最小的設置可以是:

  1. 一個int屬性,在主客戶端的 FixedUpdateNetwork 中遞增。
  2. 第二個屬性,包含「副主客戶端」的索引,該副主客戶端負責檢查是否收到來自主客戶端的更新,如果主客戶端在 X 秒內沒有更新第一個屬性,則調用RequestMasterClientReassign

預測的許可權轉移(Predicted Authority Transfer)

共用模式中物件的預測許可權轉移仍在開發中,將在 2.1 開發周期的後期發布。

共用模式自定義外掛程式(Shared Mode Custom Plugins)

自定義外掛程式允許在共用模式下的 Photon 伺服器上執行代碼。這可以為共用模式應用程式添加額外的安全層。

自定義外掛程式僅適用於 企業雲端

將寶箱的代碼從客戶端許可權移動到自定義外掛程式的示例代碼:

C#

// Client Code
public class Chest : NetworkBehaviour
{
    [Networked]
    private TickTimer _openCooldown { get; set;}

    [Rpc(RpcSources.All, RpcTargets.StateAuthority, InvokeLocalMode = RpcInvokeLocalMode.ForwardToPlugin)]
    private void RPC_Open(RpcInfo info = default)
    {
        ///......
    }
}

// Plugin Extension
partial class Chest
{
    public bool IsOpen => _openCooldown.IsRunning;

    partial void RPC_Open(ref RpcInfo info)
    {
        // The RPC is intercepted and cancelled by the plugin instead of fowarded to the StateAuthority
        info.Cancel();

        if (IsOpen)
            return;

        // Networked properties are available and can be manipulated on the custom plugin
        _openCooldown = TickTimer.CreateFromSeconds(Runner, _closeAfterTime);

        for (int i = 0; i < _rollTables.Length; i++)
        {
            NetworkObject rollItem = _rollTables[i].Roll();

            Vector2 randomOffset = Random.RandomInsideUnitCircle() * 0.25f;
            randomOffset.x += i % 2 == 0 ? i * 0.5f : -i * 0.5f;

            Vector3 position = BakedPluginData.Position + BakedPluginData.Rotation * Vector3.forward * 1.5f + new Vector3(randomOffset.x, 0.0f, randomOffset.y);

            // The Plugin can perform actions such as Spawning NetworkObjects. (In this case spawning loot)
            NetworkObject rollInstance = Runner.Spawn(rollItem, position, BakedPluginData.Rotation);
        }
    }
}

有關企業雲端的問題以及獲取自定義外掛程式的早期訪問權限,請聯繫我們

滴答速率(Tick Rate)

在 Fusion 2 中,滴答速率受限於有限的選項。Fusion 2.1 極大地擴展了這一點,允許 8hz 到 256hz 之間的任何滴答速率,以及低至滴答速率 1/8 的任何傳送速率,只要能均勻整除即可。

具體在共用模式中,Fusion 2 將滴答速率鎖定為 32hz,傳送速率鎖定為 16hz。在 Fusion 2.1 中,這兩個速率仍然受限於 32hz 的上限,但可以在該限制以下自由調整。

有多種方法可以控制共用模式的滴答速率:

  1. 可以在 NetworkProjectConfig 中將 TickRate 和 SendRate 調整到最高 32。
  2. 或者通過儀表板為所有會話覆寫。
  3. 或者通過Webhooks覆寫。

共用模式文檔(Shared Mode Docs)

我們專門為 Fusion 共用模式創建了一個新的簡化版文檔。

您可以通過在版本下拉菜單中將文檔版本切換為Fusion 2-Shared而不是Fusion 2來查看新文檔。(或者這裡。)

我們正在尋求有關這個新版本文檔的反饋,希望它能幫助只對共用模式感興趣的新 Fusion 用戶獲得更順暢的入門體驗。

新的 Fusion 中心(New Fusion Hub)

2.1 版本附帶了全新設計的 Fusion 中心。有一個單獨的中心用於僅共用模式的項目,只顯示相關內容,並且有一個新的入門工作流程,簡化了入門過程。

Fusion Hub
Hub Select Mode

更多 Fusion 中心功能將在 2.1 版本的後續更新中推出。

Photon Realtime

對於高級用戶,可以使用完整的 Photon Realtime API 創建房間,稍後再啟動 Fusion 會話。這提供了對即時通訊功能的訪問,例如 SQL 大廳、匹配槽預訂、好友等。

如果您有興趣訪問此功能,請聯繫我們

玩家唯一 ID(Player Unique Id)

從 Fusion 2.1 開始,連接到會話時,可以通過StartGameArgs.PlayerUniqueId(long)傳遞一個 ID(支援共用模式和客戶端 - 伺服器模式)。這允許玩家使用一致的 PlayerRef 連接到會話。

PlayerUniqueId不用作PlayerRef。如果是玩家第一次連接到會話,將建立一個新的PlayerRef。如果玩家之前使用相同的PlayerUniqueId連接到過會話,將使用相同的PlayerRef

除錯斷點支援(Debug Breakpoint Support)

在主機 / 伺服器模式中,可以使用斷點進行除錯,而不會觸發超時。Fusion 的多對等體模式和 Unity 的多人遊戲播放模式(MPPM)均受支援。

有關更多資訊,請參閱文件頁面

雲端連接中斷穩健性改進(Cloud Connection Lost Robustness Improvements)

Fusion SDK 2.1 版本通過擴展現有的自動連接中斷處理(在 2.0.5 中引入)增強了連接穩定性。對於與 Photon 雲端失去連接的 伺服器,預設行為現在是 CloudConnectionLostMode.MoveSessionToNewRoom。如果初始快速重新加入嘗試失敗,伺服器將自動生成新的會話 ID,建立新的房間,並通知所有直接連接的客戶端在 10 秒內轉移到這個新房間,確保遊戲會話不受中斷地繼續。開發人員現在還可以通過新的**NetworkRunner.CloudConnectionLostCurrentMode**欄位控制此過程,以啟用新房間轉移、保持原始的快速重新加入行為或完全禁用該功能。

更多資訊可以在文件頁面找到。

Back to top