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); }
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(); }
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); }