示例#1
0
        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);
        }
示例#2
0
        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;
        }