공유 모드 마스터 클라이언트
개요
SharedModeMasterClient
는 Shared Mode
세션에서 한 클라이언트에게 부여되는 역할입니다. 이 역할을 가진 플레이어는 다른 클라이언트가 접근할 수 없는 몇 가지 고유 권한을 가집니다.
할당
기본적으로 SharedModeMasterClient
역할은 공유 모드 세션을 생성한 플레이어에게 할당됩니다. 플레이어는 NetworkRunner.IsSharedModeMasterClient
를 호출하여 자신이 SharedModeMasterClient
인지 확인할 수 있습니다. 이 역할은 다음의 경우 재할당됩니다:
SharedModeMasterClient
가 나가거나 연결이 끊어진 경우, 현재 룸에 있는 클라이언트 중 한 명에게 자동으로 새로운SharedModeMasterClient
역할이 할당됩니다.SharedModeMasterClient
가NetworkRunner.SetMasterClient(PlayerRef player)
를 실행한 경우.
SharedModeMasterClient 권한
앞서 언급했듯이, SharedModeMasterClient
는 몇 가지 고유 권한을 가지고 있습니다.
씬 관리
공유 모드에서, SharedModeMasterClient
만 씬을 관리할 권한이 있습니다. 여기에는 NetworkRunner.LoadScene
과 같은 씬 관리에 관련된 모든 메서드가 포함됩니다.
씬 객체에 대한 초기 상태 권한
새로운 씬이 로드되면, SharedModeMasterClient
는 씬에 포함된 모든 NetworkObjects
에 대한 StateAuthority
를 갖게 됩니다.
마스터 클라이언트 객체 여부
NetworkObjects
의 Shared Mode Settings
에서 Is Master Client
가 true로 설정된 경우, SharedModeMasterClient
는 항상 이 NetworkObject
에 대한 State Authority
를 갖게 됩니다. 새로운 SharedModeMasterClient
가 할당되면, 이 NetworkObject
의 상태 권한
은 새 SharedModeMasterClient
로 이전됩니다.
상태 권한이 없는 오브젝트 제거
NetworkObject
가 Shared 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
인지 확인하고 이에 따라 반응할 수 있습니다.