This document is about: FUSION 2
SWITCH TO

Photon Connection Lost & Quick Reconnect

功能概述

著眼於Fusion 2.0.2,新的Photon Cloud連線遺失功能引入了一個新的回調,NetworkRunner.CloudConnectionLost,更優雅地處理Photon Cloud連線超時。此功能允許更好地管理網路中斷連線,使開發人員能夠更好地控制其應用程式回應與Photon Cloud相關的連線問題。

此功能僅適用於客戶端/伺服器模式,因此只有主機、伺服器和客戶端模式受到影響。共享模式不支持該功能。

CloudConnectionLost回調

目的

NetworkRunner.CloudConnectionLost回調旨在處理同儕節點與Photon Cloud失去連線的情況。此功能允許自動重新連線嘗試,而不是立即關閉遊戲階段,並為開發人員提供了根據連接狀態實作自訂行為的機會。

回調信號

C#

NetworkRunner.CloudConnectionLost += (NetworkRunner runner, ShutdownReason reason, bool reconnecting) => { ... };
  • runner:參照到NetworkRunner執行個體。
  • reason:ShutdownReason,表示連線遺失的原因。
  • reconnecting:一個布林值旗標,指示遊戲階段是否正在重新加入。

觸發情況

回調在兩種主要情況下觸發:

  1. Photon Cloud超時:當由於Photon Cloud超時而發生中斷連線時,回調將收到ShutdownReason.PhotonCloudTimeout
  2. 遊戲階段關閉:如果遊戲階段在重新加入嘗試成功之前關閉,回調將收到ShutdownReason.GameNotFound

行為

當實作雲端連線遺失功能時:

  1. 同儕節點在失去與Photon Cloud的連線時不會自動關閉。
  2. Fusion將嘗試自動重新加入遊戲階段。
  3. 開發人員可以根據提供的回調參數,實作自訂邏輯來處理不同的場景。

伺服器行為

如果伺服器失去與Photon Cloud的連線並且無法重新加入:

  • Fusion外掛程式會自動將伺服器設定為不可見並關閉。
  • 沒有新客戶端能夠加入遊戲階段。
  • 現有的已連線客戶端將保持連接並繼續正常遊玩。

這確保了伺服器即使在失去與Photon Cloud的連接時,也能繼續為已連接的玩家運行和維持遊戲階段。

實作示例

以下是雲端連線遺失功能的基本實作:

C#

public class NetworkRunnerCloudConnectionLost : MonoBehaviour
{
    private void Start()
    {
        NetworkRunner.CloudConnectionLost += OnCloudConnectionLost;
    }

    private void OnCloudConnectionLost(NetworkRunner runner, ShutdownReason reason, bool reconnecting)
    {
        Debug.Log($"Cloud Connection Lost: {reason} (Reconnecting: {reconnecting})");

        if (!reconnecting)
        {
            // Handle scenarios where reconnection is not possible
            // e.g., notify the user, attempt manual reconnection, etc.
        }
        else
        {
            // Wait for automatic reconnection
            StartCoroutine(WaitForReconnection(runner));
        }
    }

    private IEnumerator WaitForReconnection(NetworkRunner runner)
    {
        yield return new WaitUntil(() => runner.IsInSession);
        Debug.Log("Reconnected to the Cloud!");
    }
}

此示例演示了如何登錄回調、處理不同場景以及等待成功重新連線。

最佳做法

  • 考慮為重新連線嘗試實作超時,以防止無限期等待。
  • 向用戶提供有關連接狀態和他們需要採取的任何行動的明確反饋。

利用這一功能,開發人員可以創建更強大、更有彈性的網路遊戲,在不破壞玩家體驗的情況下處理臨時連線問題。

Back to top