[Photon Server] 1-5. Fusion: Scene Loading

scarleter99·2024년 2월 24일

[Unity] Photon Server

목록 보기
5/6
post-thumbnail

Scene Loading

  • Scene 관련 이벤트에 응답 할지 정의할 수 있는 INetworkSceneManager 인스턴스가 Scene Manager로써 기능한다.
  • Scene Manager는 NetworkRunner.StartGame()를 통해 StartGameArgs.SceneManager에 할당되어야한다.
    • Scene Manager를 할당하지 않으면 Fusion은 NetworkSceneManagerDummy의 인스턴스를 생성하고, 에러를 로그에 기록한다.
  • Fusion은 NetworkSceneManagerDefault라는 기본 Scene Manager를 제공한다.
    • Load & Unload Scene
    • 최근에 활성화되었던 Scene을 다시 로드한다.
    • 동시에 8개의 Scene까지 로드할 수 있다.

Load & Unload

  • LoadScene()UnloadScene()는 Server/Host 또는 Master Client만 실행할 수 있다.

Load Scene

// Loading 3 scenes in additive mode.
if (Runner.IsSceneAuthority) {
  Runner.LoadScene(SceneRef.FromIndex(1), LoadSceneMode.Additive);
  Runner.LoadScene(SceneRef.FromIndex(2), LoadSceneMode.Additive);
  Runner.LoadScene(SceneRef.FromIndex(3), LoadSceneMode.Additive);
}

Runner.LoadScene(SceneRef.FromIndex(SceneUtility.GetBuildIndexByScenePath(
	"Assets/Scenes/GameScene.unity")), LoadSceneMode.Additive);
    

Unload Scene

// Unloading Scene
if (Runner.IsSceneAuthority) {
  Runner.UnloadScene(SceneRef.FromIndex(1));
}

Reload Scene

// Reloading Scene
if (Runner.IsSceneAuthority) {
  Runner.UnloadScene(SceneRef.FromIndex(2));
  Runner.LoadScene(SceneRef.FromIndex(2), LoadSceneMode.Additive);
}

Custom Network Manager

  • INetworkSceneInfo
    • 변경될때마다 Scene Manager에서 OnSceneInfoChanged()가 호출된다.
  • NetworkSceneInfoDefault 클래스
    • INetworkSceneInfo의 기본 구현체이다.
    • 최대 8개의 활성 Scene 저장이 가능하며 중복을 허용한다.
  • INetworkSceneManager
    • 필드
      • bool IsBusy
      • Scene MainRunnerScene
    • 함수
      • void Initialize(NetworkRunner runner)
      • void Shutdown()
      • bool TryGetPhysicsScene2D(out PhysicsScene2D scene2D)
      • bool TryGetPhysicsScene3D(out PhysicsScene scene3D
      • void MakeDontDestroyOnLoad(GameObject obj)
      • void MoveToRunnerScene(GameObject obj)
      • bool IsRunnerScene(Scene scene)
      • NetworkSceneAsyncOp LoadScene(SceneRef sceneRef, LoadSceneParameters parameters)
      • NetworkSceneAsyncOp UnloadScene(SceneRef sceneRef)
      • void OnSceneInfoChanged()
      • SceneRef GetSceneRef(string sceneName)

0개의 댓글