공유 모드 마스터 클라이언트
개요
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인지 확인하고 이에 따라 반응할 수 있습니다.