네트워크 러너
개요
NetworkRunner
는 Fusion의 중앙 유니티 컴포넌트로, 하나의 네트워크 피어를 나타냅니다. 모든 메시징, 매치메이킹, 연결, 스폰, 시뮬레이션 및 상태 복제는 이 컴포넌트에 의해 조정됩니다.
하나의 유니티 인스턴스에서 여러 개의 NetworkRunner
인스턴스를 실행할 수 있으며, 각 인스턴스는 개별 피어를 나타냅니다. 멀티 피어 모드를 참조하세요.
사용법
생성
Network Runner 게임 객체는 다음 세 가지 방법으로 생성할 수 있습니다:
- 런타임에 프리팹에서 인스턴스화
- 씬 객체로 로드
- 게임 객체에
NetworkRunner
컴포넌트를 추가하여 런타임에 동적으로 생성
시작 및 연결
한 번 생성되면, NetworkRunner
인스턴스는 매치메이킹에 연결하거나 방을 생성/참여할 수 있습니다.
룸 생성 또는 참여
NetworkRunner
인스턴스에서 StartGame()
을 호출하면 피어가 생성되며, StartGameArgs
인자에 지정된 대로 방에 참여하거나 방을 생성합니다.
그러나 싱글 플레이어 모드에서는 Photon 서버에 연결되지 않으며 방이 생성되지 않습니다.
멀티 피어 모드에서는 모든 씬 객체와 스폰 된 객체가 전용 게임 객체의 자식이 되어 해당 NetworkRunner
와 연결된 PhysicsScene/PhysicsScene2D에 추가됩니다.
중요: NetworkRunner
는 한 번만 사용할 수 있습니다. 한 번 게임 세션에서 연결이 끊어지거나 연결에 실패하면, 해당 NetworkRunner
는 파괴되고, 새로 NetworkRunner
인스턴스를 생성하여 새 게임 세션을 시작해야 합니다.
러너 지원 컴포넌트
시작 시, NetworkRunner
컴포넌트는 모든 자식 SimulationBehaviour
컴포넌트를 찾아 등록합니다.
이 컴포넌트들은 FixedUpdateNetwork()
및 Render()
콜백을 받습니다.
NetworkRunner
는 또한 INetworkRunnerCallbacks
인터페이스를 구현한 모든 자식 컴포넌트를 찾아 콜백을 등록합니다.
내장 Fusion 러너 컴포넌트
다음은 NetworkRunner
게임 객체에 추가할 수 있는 Fusion 컴포넌트로, 러너의 기능을 확장합니다.
RunnerAOIGizmos
- 관심 지역 기즈모를 활성화하려면 이 컴포넌트를 추가하세요.HitboxManager
- 런타임에 자동으로 추가되며, 히트 박스와 히트 박스 기록을 관리합니다. 지연 보상을 참조하세요.RunnerLagCompensationGizmos
- 지연 보상 기즈모를 활성화하려면 이 컴포넌트를 추가하세요.RunnerEnableVisibility
- 이 컴포넌트를 추가하면 멀티 피어 모드에서 러너 가시성이 활성화되고, 모든 씬 및 스폰 된 게임 객체는 가시성 처리를 위해 등록됩니다. 러너 가시성 제어 창이 작동하려면 필요합니다. 멀티 피어 모드 및 FusionRunnerVisibilityControlWindow를 참조하세요.
사용자 정의 SimulationBehaviours 러너 컴포넌트 (Custom SimulationBehaviours Runner Components)
SimulationBehaviour
를 상속하거나 INetworkRunnerCallbacks
를 구현한(또는 둘 다) 컴포넌트를 네트워크 러너 게임 객체에 추가하여 자신만의 러너 지원 컴포넌트를 만들 수 있습니다.
이 컴포넌트들은 NetworkRunner.StartGame()
이 호출될 때 자동으로 NetworkRunner
인스턴스에 의해 발견되며, 관련된 콜백이 해당 상황에서 호출됩니다.
사용자 정의 INetworkRunnerCallbacks
시작 시, NetworkRunner
컴포넌트는 INetworkRunnerCallbacks
를 구현한 모든 자식 컴포넌트를 찾아 등록합니다. INetworkRunnerCallbacks API 참조.
참고: 일부 콜백은 실행 순서로 인해 적용되지 않을 수 있으며 호출되지 않을 수 있습니다. 예를 들어, OnPlayerJoined()
는 이미 참여한 플레이어에 대해서는 호출되지 않습니다.
플레이어 / PlayerRef 구조체 (Player / PlayerRef Struct)
전용 서버 또는 공유 서버 게임 서버의 경우를 제외하고, 모든 피어는 입력을 제공하는 인간 플레이어를 나타낸다고 가정합니다. 따라서 각 NetworkRunner
는 연관된 PlayerRef
구조체 값을 가집니다.
로컬 PlayerRef
값은 Runner.LocalPlayer
를 통해 반환됩니다. 플레이어가 없는 경우(전용 서버 또는 공유 서버 게임 서버), 값은 PlayerRef.None
입니다.
PlayerRef
는 어떤 피어가 네트워크 객체에 대한 입력 및 상태 권한을 가지고 있는지 나타내며, 원격 프로시저 호출에서 피어를 대상으로 지정하는 데 사용됩니다.
네트워크 연결
피어의 연결 및 전송 처리는 NetworkRunner
에 의해 래핑 됩니다.
NetworkRunner
는 매치메이킹 서버, 방 서버 및 게임 서버와의 연결을 처리합니다.
틱 관리
NetworkRunner
는 언제 틱을 시뮬레이션해야 하는지 결정하는 책임이 있습니다.
매 Unity Update에서, NetworkRunner
는 이전 틱 시뮬레이션 이후 경과된 시간에 따라 몇 개의 틱을 시뮬레이션해야 할지 결정합니다.
또한, 방에 있는 클라이언트는 서버로부터 텔레메트리를 계속 수신하여 서버보다 얼마나 앞서서 틱을 진행해야 하는지를 조절합니다. 클라이언트는 시간이 지나면서 틱 속도를 조절하여 보낸 틱 업데이트가 서버가 필요로 하기 전에 서버에 도달하도록 합니다.
틱이 시뮬레이션되면, Fusion은 모든 FixedUpdateNetwork()
콜백을 호출합니다. 그 외에도 시뮬레이션 관련된 여러 이벤트 콜백이 호출됩니다.