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