This document is about: FUSION 2
SWITCH TO

Photon 연결 손실 및 빠른 재연결

기능 개요

Fusion 2.0.2부터 새로운 Photon Cloud 연결 손실 기능이 도입되었습니다. 이를 통해 NetworkRunner.CloudConnectionLost 콜백을 활용하여 Photon Cloud 연결 시간 초과를 보다 원활하게 처리할 수 있습니다. 이 기능은 네트워크 연결 끊김에 대해 애플리케이션이 어떻게 반응할지에 대해 개발자가 더 많은 제어권을 가질 수 있도록 도와줍니다.

이 기능은 클라이언트/서버 모드에서만 적용되며, 호스트, 서버, 클라이언트 모드에만 영향을 미칩니다. 공유 모드에서는 지원되지 않습니다.

CloudConnectionLost 콜백

목적

NetworkRunner.CloudConnectionLost 콜백은 피어가 Photon Cloud와의 연결을 잃는 상황을 처리하도록 설계되었습니다. 세션을 즉시 종료하는 대신, 이 기능은 자동 재연결 시도를 허용하며, 개발자가 연결 상태에 따라 사용자 정의 동작을 구현할 수 있는 기회를 제공합니다.

콜백 시그니처

C#

NetworkRunner.CloudConnectionLost += (NetworkRunner runner, ShutdownReason reason, bool reconnecting) => { ... };
  • runner: NetworkRunner 인스턴스에 대한 참조.
  • reason: 연결 손실 이유를 나타내는 ShutdownReason.
  • reconnecting: 세션 재참가가 진행 중인지 여부를 나타내는 boolean 플래그.

호출 조건

이 콜백은 두 가지 주요 상황에서 호출됩니다:

  1. Photon Cloud 타임아웃: Photon Cloud 시간 초과로 인해 연결이 끊어질 경우, 콜백은 ShutdownReason.PhotonCloudTimeout을 수신합니다.
  2. 세션 종료: 재참가 시도가 성공하기 전에 세션이 종료된 경우, 콜백은 ShutdownReason.GameNotFound를 수신합니다.

동작

Cloud Connection Lost 기능이 구현되면:

  1. 피어는 Photon Cloud 연결 손실 시 자동으로 종료되지 않습니다.
  2. Fusion은 세션에 자동으로 재참가를 시도합니다.
  3. 개발자는 제공된 콜백 매개변수를 기반으로 다양한 시나리오를 처리하는 사용자 정의 로직을 구현할 수 있습니다.

서버 동작

서버가 Photon Cloud와의 연결을 잃고 재참가에 실패한 경우:

  • Fusion 플러그인은 서버를 자동으로 보이지 않게 하고 세션을 닫습니다.
  • 새로운 클라이언트는 세션에 참가할 수 없습니다.
  • 이미 연결된 클라이언트는 계속 연결된 상태로 게임을 정상적으로 플레이할 수 있습니다.

이로 인해 서버는 Photon Cloud 연결 손실에도 불구하고 이미 연결된 플레이어들을 위한 게임 세션을 유지합니다.

구현 예제

다음은 Cloud Connection Lost 기능의 기본 구현 예제입니다:

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