네트워크 동작
개요
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
의 결과 상태는 캡처되어 해당 틱의 객체 스냅샷이 됩니다.