Пример #1
0
        private IEnumerator AnalyzeBundleScene(Scene scene)
        {
            yield return(new WaitForEndOfFrame());

            Scene defaultScene = SceneManager.GetActiveScene();

            SceneManager.SetActiveScene(scene);

            BundleSceneInfo info = m_BundleSceneInfos.Peek();

            if (info.sceneName != scene.name)
            {
                Debug.LogError("What's scene? " + scene.path);
                yield break;
            }

            AssetBundleFilesAnalyze.AnalyzeObjectReference(info.fileInfo, RenderSettings.skybox);
            GameObject[] gos = scene.GetRootGameObjects();
            foreach (var go in gos)
            {
                AssetBundleFilesAnalyze.AnalyzeObjectComponent(info.fileInfo, go);
            }
            AssetBundleFilesAnalyze.AnalyzeObjectsCompleted(info.fileInfo);
            SceneManager.SetActiveScene(defaultScene);

            info.ab.Unload(true);
            info.ab = null;
            SceneManager.UnloadScene(scene);
        }
Пример #2
0
        private void SceneManagerOnSceneUnloaded(Scene scene)
        {
            BundleSceneInfo info = m_BundleSceneInfos.Peek();

            if (info.sceneName != scene.name)
            {
                Debug.LogError("What's scene? " + scene.path);
                return;
            }

            m_BundleSceneInfos.Dequeue();
            LoadNextBundleScene();
        }
Пример #3
0
        private void LoadNextBundleScene()
        {
            if (m_BundleSceneInfos.Count <= 0)
            {
                SceneManager.sceneLoaded   -= SceneManagerOnSceneLoaded;
                SceneManager.sceneUnloaded -= SceneManagerOnSceneUnloaded;

                if (AssetBundleFilesAnalyze.analyzeCompleted != null)
                {
                    AssetBundleFilesAnalyze.analyzeCompleted();
                }
                return;
            }

            // 释放一下内存,以免爆掉
            Resources.UnloadUnusedAssets();
            GC.Collect();

            BundleSceneInfo info = m_BundleSceneInfos.Peek();

            info.ab = AssetBundle.LoadFromFile(info.fileInfo.path);
            SceneManager.LoadScene(info.sceneName, LoadSceneMode.Additive);
        }