This document is about: FUSION 2
SWITCH TO

공유 모드 마스터 클라이언트

개요

SharedModeMasterClientShared Mode 세션에서 한 클라이언트에게 부여되는 역할입니다. 이 역할을 가진 플레이어는 다른 클라이언트가 접근할 수 없는 몇 가지 고유 권한을 가집니다.

할당

기본적으로 SharedModeMasterClient 역할은 공유 모드 세션을 생성한 플레이어에게 할당됩니다. 플레이어는 NetworkRunner.IsSharedModeMasterClient를 호출하여 자신이 SharedModeMasterClient인지 확인할 수 있습니다. 이 역할은 다음의 경우 재할당됩니다:

  • SharedModeMasterClient가 나가거나 연결이 끊어진 경우, 현재 룸에 있는 클라이언트 중 한 명에게 자동으로 새로운 SharedModeMasterClient 역할이 할당됩니다.
  • SharedModeMasterClientNetworkRunner.SetMasterClient(PlayerRef player)를 실행한 경우.

SharedModeMasterClient 권한

앞서 언급했듯이, SharedModeMasterClient는 몇 가지 고유 권한을 가지고 있습니다.

씬 관리

공유 모드에서, SharedModeMasterClient만 씬을 관리할 권한이 있습니다. 여기에는 NetworkRunner.LoadScene과 같은 씬 관리에 관련된 모든 메서드가 포함됩니다.

씬 객체에 대한 초기 상태 권한

새로운 씬이 로드되면, SharedModeMasterClient는 씬에 포함된 모든 NetworkObjects에 대한 StateAuthority를 갖게 됩니다.

마스터 클라이언트 객체 여부

NetworkObjectsShared Mode Settings에서 Is Master Client가 true로 설정된 경우, SharedModeMasterClient는 항상 이 NetworkObject에 대한 State Authority를 갖게 됩니다. 새로운 SharedModeMasterClient가 할당되면, 이 NetworkObject상태 권한은 새 SharedModeMasterClient로 이전됩니다.

상태 권한이 없는 오브젝트 제거

NetworkObjectShared Mode Settings에서 Allow State Authority Override를 활성화하고 Destroy When State Authority Leaves를 비활성화한 경우, 플레이어가 연결을 끊어도 해당 NetworkObject는 파괴되지 않습니다. 그러나 SharedModeMasterClient는 해당 오브젝트에 StateAuthority가 없어도 이 오브젝트를 제거할 수 있습니다.

Shared Mode Master Client 추적

NetworkRunner.IsSharedModeMasterClient는 사용자가 SharedModeMasterClient인지 여부를 알려주지만, 다른 클라이언트가 누가 SharedModeMasterClient인지 알 수 있는 내장 솔루션은 없습니다. 이는 세션 내에서 누가 SharedModeMasterClient인지 다른 플레이어들에게 알리는 것이 유용한 애플리케이션에서 필요할 수 있습니다. 다음은 이를 구현하는 한 가지 방법입니다:

  • NetworkObject를 생성하고 Shared Mode Settings에서 Is Master Client Object를 true로 설정합니다.
  • 다음과 같은 스크립트를 생성하여 누가 SharedModeMasterClient인지 전송하는 데 사용하고, 이를 앞서 생성한 NetworkObject에 추가합니다:

using Fusion;

public class SharedModeMasterClientTracker : NetworkBehaviour
{
    static SharedModeMasterClientTracker LocalInstance;

    public override void Spawned()
    {
        LocalInstance = this;
    }

    private void OnDestroy()
    {
        if (LocalInstance == this)
            LocalInstance = null;
    }

    public static bool IsPlayerSharedModeMasterClient(PlayerRef player)
    {
        if (LocalInstance == null)
            return false;

        return LocalInstance.Object.StateAuthority == player;
    }

    public static PlayerRef? GetSharedModeMasterClientPlayerRef()
    {
        if (LocalInstance == null)
            return null;

        return LocalInstance.Object.StateAuthority;
    }
}

정적 인스턴스를 이 NetworkBehaviour에 저장함으로써 사용자는 누가 SharedModeMasterClient인지 확인하고 이에 따라 반응할 수 있습니다.

Back to top