@@ -73,18 +73,24 @@ public static SceneSwitchProgress SwitchScene(string sceneName)
7373 sceneSwitchProgresses . Add ( switchSceneProgress . guid , switchSceneProgress ) ;
7474 currentSceneSwitchProgressGuid = switchSceneProgress . guid ;
7575
76-
77- nextScene = SceneManager . GetSceneByName ( sceneName ) ;
78-
7976 Scene temporaryScene = SceneManager . CreateScene ( "MLAPI_tmp_switch_" + currentSceneSwitchProgressGuid ) ;
8077
8178 // Move ALL networked objects to the temp scene
8279 MoveAllNetworkedObjectsToScene ( temporaryScene ) ;
80+
81+ AsyncOperation unloadCurrentScene = SceneManager . UnloadSceneAsync ( lastScene ) ;
8382
84- // Switch scene
85- AsyncOperation sceneLoad = SceneManager . LoadSceneAsync ( sceneName , LoadSceneMode . Single ) ;
86- sceneLoad . completed += ( AsyncOperation asyncOp ) => { OnSceneLoaded ( switchSceneProgress . guid , temporaryScene , null ) ; } ;
87- switchSceneProgress . SetSceneLoadOperation ( sceneLoad ) ;
83+ unloadCurrentScene . completed += ( AsyncOperation asyncOp1 ) =>
84+ {
85+ // Switch scene
86+ AsyncOperation sceneLoad = SceneManager . LoadSceneAsync ( sceneName , LoadSceneMode . Additive ) ;
87+
88+ nextScene = SceneManager . GetSceneByName ( sceneName ) ;
89+
90+ sceneLoad . completed += ( AsyncOperation asyncOp2 ) => { OnSceneLoaded ( switchSceneProgress . guid , temporaryScene , null ) ; } ;
91+
92+ switchSceneProgress . SetSceneLoadOperation ( sceneLoad ) ;
93+ } ;
8894
8995 return switchSceneProgress ;
9096 }
@@ -110,9 +116,20 @@ internal static void OnSceneSwitch(uint sceneIndex, Guid switchSceneGuid, Stream
110116 MoveAllNetworkedObjectsToScene ( temporaryScene ) ;
111117
112118 string sceneName = sceneIndexToString [ sceneIndex ] ;
113- AsyncOperation sceneLoad = SceneManager . LoadSceneAsync ( sceneName , LoadSceneMode . Single ) ;
114- nextScene = SceneManager . GetSceneByName ( sceneName ) ;
115- sceneLoad . completed += ( AsyncOperation operation ) => { OnSceneLoaded ( switchSceneGuid , temporaryScene , objectStream ) ; } ;
119+
120+ AsyncOperation unloadCurrentScene = SceneManager . UnloadSceneAsync ( lastScene ) ;
121+
122+ unloadCurrentScene . completed += ( AsyncOperation asyncOp1 ) =>
123+ {
124+ AsyncOperation sceneLoad = SceneManager . LoadSceneAsync ( sceneName , LoadSceneMode . Additive ) ;
125+
126+ nextScene = SceneManager . GetSceneByName ( sceneName ) ;
127+
128+ sceneLoad . completed += ( AsyncOperation asyncOp2 ) =>
129+ {
130+ OnSceneLoaded ( switchSceneGuid , temporaryScene , objectStream ) ;
131+ } ;
132+ } ;
116133 }
117134
118135 internal static void OnFirstSceneSwitchSync ( uint sceneIndex , Guid switchSceneGuid )
0 commit comments