This document is about: FUSION 2
SWITCH TO

接続切断とクイック再接続

機能の概要

Fusion 2.0.2から、Photon Cloudの新しい接続切断機能によって、新しいコールバックNetworkRunner.CloudConnectionLostが導入され、Photon Cloudの接続タイムアウトをより柔軟に処理できるようになりました。この機能によって、ネットワーク切断を適切に管理できるようになり、Photon Cloud関連の接続問題の対処方法を、アプリケーションでより詳細に制御できるようになります。

この機能はホストモードのみに適用されるため、影響を受けるのはHost・Server・Clientモードのみです。共有モードはサポートされません。

CloudConnectionLostコールバック

目的

NetworkRunner.CloudConnectionLostコールバックは、ピアがPhoton Cloudの接続を失った場合に処理がじっこうできるように設計されています。この機能によって、セッションをすぐにシャットダウンするかわりに、自動的な再接続の試行と、接続ステータスに基づいた独自の動作を実装することができます。

コールバックシグネチャ

C#

NetworkRunner.CloudConnectionLost += (NetworkRunner runner, ShutdownReason reason, bool reconnecting) => { ... };
  • runnerNetworkRunnerインスタンスの参照
  • reason:接続が切断された理由を表すShutdownReason
  • reconnecting:セッションへ再接続中かどうかを示すフラグ

呼び出される条件

主に2つの状況で、コールバックが呼び出されます。

  1. Photon Cloudのタイムアウト:Photon Cloudのタイムアウトによって切断が発生した場合、コールバックはShutdownReason.PhotonCloudTimeoutを受け取ります。
  2. セッションの終了:再参加の試行が成功する前にセッションが終了した場合、コールバックはShutdownReason.GameNotFoundを受け取ります。

挙動

Photon Cloud接続切断機能が実装されている場合は、

  1. ピアは、Photon Cloudとの接続を失っても、自動的にシャットダウンしません。
  2. Fusionは、自動的にセッションへの再参加を試みます。
  3. 開発者は、与えられたコールバックパラメーターに基づいて、様々な状況を処理するための独自ロジックを実装できます。

サーバーの挙動

サーバーがPhoton Cloudとの接続を失った場合、再参加はできません。

  • Fusionプラグインは、自動的にサーバーを非公開かつ参加不可能に設定します。
  • 新しいクライアントはセッションへ参加できなくなります。
  • 接続中の既存クライアントは、接続したままで通常通りプレイを継続します。

これによって、Photon Cloudとの接続を失った場合でも、サーバーは動作し続けて、接続中の既存プレイヤーのためのゲームセッションを維持します。

実装例

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)
        {
            // 再接続が不可能だった場合の処理
            // 例:ユーザーへの通知、手動での再接続の試行など
        }
        else
        {
            // 自動的な再接続を待つ
            StartCoroutine(WaitForReconnection(runner));
        }
    }

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

この例では、コールバックの登録・状況に基づく分岐処理・再接続成功までの待機を示しています。

ベストプラクティス

  • 長時間待機を防ぐために、再接続の試行タイムアウトの実装を検討しましょう。
  • ユーザーに対しては、接続ステータスや必要なアクションについての明確なフィードバックを提供しましょう。

この機能を活用することで、プレイヤー体験を阻害することなく、一時的な接続問題に対処できる堅牢で耐性があるネットワークゲームが作成できます。

Back to top