private bool StartLoadOp(int n, LoadSceneMode mode) { LevelLoadOperation loadOp = new LevelLoadOperation { scenePath = levels[n].ScenePath, level = levels[n] }; // Scene path has not been set if (string.IsNullOrEmpty(loadOp.scenePath)) { return(false); } onWillLoad.Invoke(); string sceneName = Path.GetFileNameWithoutExtension(loadOp.scenePath); // Scene is already loaded if (SceneManager.GetSceneByName(sceneName).IsValid()) { onLevelLoaded.Invoke(loadOp.level); return(false); } numLoadedLevels = 0; ++numLevelsToLoad; loadOp.asyncOp = SceneManager.LoadSceneAsync(sceneName, mode); loadOps.Add(loadOp); isLoading = numLevelsToLoad > 0; return(true); }
private void Update() { if (!isLoading) { return; } for (int i = loadOps.Count - 1; i >= 0; --i) { LevelLoadOperation loadOp = loadOps[i]; if (loadOp.asyncOp == null || !loadOp.asyncOp.isDone) { continue; } onLevelLoaded.Invoke(loadOp.level); loadOps.RemoveAt(i); ++numLoadedLevels; } Progress = (float)numLoadedLevels / numLevelsToLoad; if (numLoadedLevels < numLevelsToLoad) { return; } onAllLevelsLoaded.Invoke(); numLevelsToLoad = 0; numLoadedLevels = 0; isLoading = false; }