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
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
if (Runner.IsSceneAuthority) {
Runner.UnloadScene(SceneRef.FromIndex(1));
}
Reload 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)