실행 순서
개요
Fusion의 실행 루프는 3개의 주요 루프로 세분화될 수 있습니다:
- 리시뮬레이션 루프
- 포워드 루프 및
- 렌더 루프
다음 섹션에서는 이러한 세 가지 루프와 이러한 루프에서 스크립트 및 콜백을 호출하는 순서를 설명합니다.
INT
:INT
로 표시된 콜백은 Fusion에서 내부적으로 사용하며 다음 경우에만 포함됩니다.CB
:CB
로 표시된 콜백은 사용자가 사용할 수 있으며NetworkBehaviour
및SimulationBehaviour
에서 상속되는 스크립트에 관련 인터페이스를 구현하여 연결할 수 있습니다.
전체 그래픽 다운로드
전체 실행 순서 그래픽은 여기에서 다운로드할 수 있습니다.
Fusion 초기화
Fusion이 처음 시작되면 NetworkRunner
는 다음을 구현하는 모든 컴포넌트를 찾습니다. INetworkRunnerCallbacks
은 Runner로서 동일한 객체에 있습니다. Awake()
에서 아무것도 탐지되지 않으면 Fusion Update 루프 중 또는 드물게는 셧다운 처리 중에 다른 시도가 수행되어 정상적으로 종료됩니다.
INetworkRunnerCallbacks
을 구현하는 스크립트와 NetworkRunner
와 동일한 객체 또는 계층 수준에 있지 않으므로 Runner가 성공적으로 초기화된 이후 NetworkRunner.AddCallbacks()
를 호출하여 NetworkRunner
로 등록해야 합니다.
Fusion 업데이트 루프
Fusion 시뮬레이션의 핵심은 리시뮬레이션 및 포워드 루프에 의해 처리됩니다. 실행 전에 다음을 수행합니다:
- 유니티 자체 FixedUpdate() 메소드가 실행됩니다.
PhysicsMode.None
이 선택된 경우 로컬 물리 시뮬레이션이 실행됩니다.
이러한 단계가 이후 Fusion 업데이트 루프가 시작됩니다. Fusion 업데이트 루프는 다음 실행 단계들로 구성됩니다:
NetworkRunner
에 등록된 콜백이 실행됩니다.NetworkObject
스폰 대기열이 처리됩니다. 이 작업은SceneManager
가 사용 중 그리고SceneLoadSpawnMode.Queued
가NetworkProjectConfig > Object Settings
에서 선택된 경우에만 발생합니다.- 리시뮬레이션 루프가 실행됩니다.
- 포워드 루프가 실행됩니다.
OnChanged
콜백은 두 루프 모두 실행이 완료된 후 호출됩니다.- 관심 관리가 업데이트됩니다.
- 리시뮬레이션 또는 포워드 루프에서
FixedUpdateNetwork()
내에서NetworkRunner.Shutdown()
이 호출되면 셧다운 처리가 트리거 됩니다.
업데이트 루프 시작
리시뮬레이션 루프
ServerMode
그리고 HostMode
모드에서만 실행됩니다.리시뮬레이션 루프는 로컬 상태를 서버 또는 호스트로부터 받은 최신 상태로 조정합니다. 네트워크 상태를 가장 최근에 수신한 상태로 재설정하고 유효한 상태에 포함된 가장 최근의 서버_ 틱부터 현재 예측된 로컬 틱까지 모든 틱을 다시 시뮬레이션하여 이 작업을 수행합니다.
포워드 루프
SharedMode
포함** 호스트 모드 & 서버 모드**
포워드 루프는 리시뮬레이션 루프가 알려진 현재 [Networked]
상태를 조정한 후 다음 예측된
틱을 시뮬레이션합니다.
공유 모드에서
포워드 루프는 시뮬레이션을 실행하는 유일한 루프입니다. 이 루프는 로컬 시뮬레이션에 상태 권한이 있는 객체의 시뮬레이션과 프록시 객체에 수신된 상태를 적용합니다.
업데이트 루프 종료
렌더 루프
렌더 루프는 게임 플레이 또는 게임 상태와 무관한 모든 것에 사용됩니다. 주요 목적은 보간 및 VFX 및 애니메이션과 같은 시각적 피드백 로직을 위한 항목을 제공하는 것입니다.
- 이전
Render()
, 유니티의 모든Update()
메소드가 실행됩니다. - 이후
Render()
, 유니티의 모든LateUpdate
메소드가 실행됩니다.
셧다운 처리는 렌더 루프에서 NetworkRunner.Shutdown()
이 호출되면 트리거됩니다.