멀티 피어 모드
개요
멀티 피어 모드는 하나의 유니티 에디터 인스턴스 내에서, 각기 독립적인 NetworkRunner 인스턴스(각자의 Fusion 시뮬레이션, 물리 씬, 네트워크 연결, 그리고 씬을 포함)를 여러 개 생성할 수 있도록 합니다.
멀티 피어 모드는 유니티 에디터 상단 메뉴에서 Fusion > NetworkProjectConfig를 선택한 후, Peer Mode를 Multiple로 설정하여 활성화할 수 있습니다.
하나의 유니티 인스턴스에서 여러 피어(NetworkRunner)를 실행할 수 있게 되면 다음과 같은 이점이 있습니다:
- 여러 클라이언트를 에디터 내에서 테스트할 수 있어, 별도의 빌드나 추가적인 유니티 에디터 인스턴스가 필요 없습니다.
- 하나의 유니티 인스턴스가 여러 게임 세션을 호스팅 할 수 있는 전용 서버를 만들 수 있습니다.
- 클라이언트가 여러 게임 세션에 동시에 접속할 수 있습니다.
NetworkRunner 가시성
NetworkRunner 가시성 기능은 오직 멀티 피어 모드에서만 적용됩니다.
기본적으로 모든 피어는 가시성이 활성화되어 있습니다.
씬이 로드되거나 오브젝트가 스폰 될 때, NetworkRunner의 가시성 시스템에 의해 렌더러, 오디오 소스, 그리고 기타 가시성 관련 컴포넌트가 자동으로 등록됩니다.
RunnerEnableVisibility 컴포넌트
중요: RunnerEnableVisibility 컴포넌트를 NetworkRunner 게임 오브젝트(또는 프리팹)에 반드시 추가해야 가시성 제어가 가능합니다.
이 컴포넌트가 추가되면, 모든 스폰 된 네트워크 오브젝트(NetworkObjects) 및 씬에 있는 일반 GameObjects(씬에 직접 존재하는 오브젝트)들이 검색되어, 가시성 제어 대상 리스트에 등록됩니다. 이 리스트의 오브젝트들은 NetworkRunner.SetVisibility(bool) 메서드를 통해 활성화/비활성화됩니다.
GetVisible()과 SetVisible(bool)
멀티 피어 모드에서 NetworkRunner.SetVisible(bool)을 호출하면, 해당 NetworkRunner에 연결된 모든 렌더링/오디오 등 가시성 컴포넌트가 활성화 또는 비활성화됩니다.
이를 통해 개발자는 코드 실행에는 영향을 주지 않고, 특정 NetworkRunner에 연결된 오브젝트만 화면에 표시하거나 숨길 수 있습니다.
EnableOnSingleRunner 컴포넌트
이 컴포넌트는 Components 필드에 나열된 각 컴포넌트에 대해 자동으로 RunnerVisibilityLink 컴포넌트를 추가합니다.
이렇게 설정된 컴포넌트는 멀티 피어 모드에서 단 하나의 인스턴스만 활성화됩니다.
특히 AudioListeners나 EventSystems처럼 유니티가 싱글톤으로 의도한 컴포넌트에 중요합니다.
Preferred Runner
여러 NetworkRunner가 활성화된 경우, 어떤 타입의 피어를 우선 표시할지 선택할 수 있습니다.
Components
여기 등록된 컴포넌트들은 싱글 인스턴스만 활성화됩니다.
(예: 오직 하나의 AudioListener만 활성화)
Network Runner Controls 창
Tools > Fusion > Windows > Network Runner Controls 메뉴를 통해 Network Runner Controls 창을 열 수 있습니다.
이 창에서는 러너를 표시/숨기거나, 입력을 받을 러너를 제어할 수 있습니다.
또한 활성화된 러너에 대해 FusionStats 오버레이를 빠르게 생성하는 버튼도 제공됩니다.
리스트에서 NetworkRunner 이름을 클릭하면, 해당 인스턴스를 씬 뷰에서 핑(Ping)하거나 선택할 수 있습니다.
또한 NetworkRunner.PlayerRef.PlayerId가 NetworkRunner 이름 옆에 표시됩니다.
만약 PlayerObject가 할당되어 있다면, 이를 클릭해 해당 플레이어 GameObject를 씬에서 핑하거나 선택할 수 있습니다.
멀티 피어 통합 예시
- Hathora 와 Simple FPS 샘플에서의 통합 사례