네트워크 동작
개요
NetworkBehaviour는 Unity의 MonoBehaviour 클래스를 상속받고 확장하여 다음을 포함합니다:
Runner속성으로 관련된NetworkRunner에 대한 참조.Object속성으로 관련된NetworkObject에 대한 참조.- 네트워크 속성을 처리하는 기능.
- 원격 프로시저 호출(을 처리하는 기능.
Spawned(),Despawned(NetworkRunner runner, bool hasState),FixedUpdateNetwork(),Render()에 대한 가상 이벤트 콜백.- 흐름 제어를 위한 권한 처리.
HasStateAuthority,HasInputAuthority,IsProxy.
NetworkBehaviour 컴포넌트는 네트워크 객체와 그 자식 변환에 여러 개 추가할 수 있습니다.
각 NetworkBehaviour 인스턴스는 네트워크 객체의 상태(Networked Properties)와 시뮬레이션(FixedUpdateNetwork())의 일부를 나타냅니다.
NetworkBehaviourId
첨부된 네트워크 객체의 각 NetworkBehaviour 컴포넌트는 고유한 네트워크 식별자를 가집니다.
이 식별자는 네트워크 속성(Networked Property)이나 원격 프로시저 호출(Remote Procedure Call)을 통해 NetworkBehaviour를 참조하는 데 사용될 수 있습니다. 고급 네트워크 속성을 참조하세요.
네트워크 속성 (상태)
네트워크 속성 은 NetworkBehaviour에서 [Networked] 특성으로 정의된 속성입니다.
이 속성들은 네트워크 객체의 상태를 나타내며, 그 값은 상태 권한을 가진 피어에서 다른 관심 있는 피어로 복제됩니다.
서버 모드에서는 서버가 항상 상태 권한을 가집니다. 공유 모드에서는 플레이어가 상태 권한을 가집니다.
이 속성들은 구현 없이 자동 구현된 속성으로 정의되며(빈 { get; set; } 형태로만 정의됨),
NetworkBehaviour에서 Spawned()가 호출될 때까지 네트워크 속성에 접근할 수 없습니다.
이벤트 함수
NetworkBehaviour는 여러 개의 가상 생애 주기 이벤트 함수를 제공하며, 이들은 모두 구현을 추가하기 위해 오버라이드 할 수 있습니다.
| 함수 | 설명 |
|---|---|
| FixedUpdateNetwork() | Fusion의 고정 시간 간격 콜백. 시뮬레이션 틱 당 한 번 호출됩니다. 핵심 게임 로직의 시뮬레이션에 사용됩니다. Unity의 `FixedUpdate()` 대신 사용하세요. |
| Spawned() | `NetworkRunner`에 네트워크 객체가 연결된 후 호출됩니다. 네트워크 객체가 초기화된 후 호출되며, 네트워크 속성과 RPCs를 사용할 수 있게 됩니다. Unity의 `Start()` 대신 사용하세요. |
| Despawned(NetworkRunner runner, bool hasState) | 네트워크 객체가 제거되기 전에 호출됩니다. Unity의 `OnDestroy()` 대신 사용하세요. --- `NetworkRunner runner`: 이 네트워크 객체가 속해 있던 `NetworkRunner`입니다. `bool hasState`: 행동의 상태가 여전히 접근 가능한지 여부입니다. |
| Render() | 시뮬레이션 후 프레임 렌더링 콜백. 모든 시뮬레이션 단계(`FixedUpdateNetwork`)가 끝난 후 실행됩니다. Unity의 `Update()` 대신 사용하세요. |
FixedUpdateNetwork() (시뮬레이션)
FixedUpdateNetwork()는 사용자 정의 시뮬레이션 코드가 구현되는 곳입니다. 여기에는 플레이어 입력을 사용하여 현재 상태를 변경하는 코드가 추가됩니다. 만약 NetworkObject.IsInSimulation이 true라면, FixedUpdateNetwork()는 해당 객체의 모든 NetworkBehaviour에서 매 틱마다 호출됩니다. 모든 FixedUpdateNetwork() 메서드가 호출된 후, 모든 NetworkBehaviour의 결과 상태는 캡처되어 해당 틱의 객체 스냅샷이 됩니다.