Example #1
0
        private static IEnumerator DoLoadSubSceneAsync(string sceneName)
        {
            if (!Common.IsDebug)
            {
                // 先异步加载场景对应的 AssetBundle
                ABI abi = ResManager.GetAbi(ResManager.GetPathMD5(sceneName));
                if (abi.ab == null)
                {
                    ABLoader.ParseFilePath(abi);
                    s_abcr = AssetBundle.LoadFromFileAsync(abi.filePath);
                    yield return(s_abcr);

                    abi.ab = s_abcr.assetBundle;
                    s_abcr = null;
                }
            }

            // 再异步加载 SubScene
            s_ao = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
            s_ao.allowSceneActivation = false;
            while (!s_ao.isDone)
            {
                if (s_ao.progress >= 0.9f)
                {
                    s_ao.allowSceneActivation = true;
                }
                yield return(null);
            }
            s_ao           = null;
            s_subCoroutine = null;
            DispatchLuaEvent(EVENT_SUB_COMPLETE, sceneName);
        }
Example #2
0
        /// <summary>
        /// 同步加载场景
        /// </summary>
        /// <param name="sceneName">Scene path.</param>
        public static void LoadScene(string sceneName)
        {
            UnloadSubSceneAssetBundle();

                        #if UNITY_EDITOR
            if (Common.IsDebug)
            {
                // [ Editor Play Mode ] 请将要加载的场景(在 Assets/Res/Scene/ 目录下)加入到 [ Build Settings -> Scenes In Build ] 中
                SceneManager.LoadScene(sceneName);
                return;
            }
                        #endif

            // 这两个是随包走的场景
            if (sceneName != Constants.LauncherSceneName && sceneName != Constants.EmptySceneName)
            {
                ABI abi = ResManager.GetAbi(ResManager.GetPathMD5(sceneName));
                if (abi.ab == null)
                {
                    ABLoader.ParseFilePath(abi);
                    abi.ab = AssetBundle.LoadFromFile(abi.filePath);                     // 先加载场景对应的 AssetBundle
                }
            }

            Common.looper.StartCoroutine(UnloadSceneAssetBundle(s_sceneName));
            s_sceneName = sceneName;
            SceneManager.LoadScene(sceneName);             // 再载入场景
        }
Example #3
0
        /// <summary>
        /// 同步加载 Sub 场景
        /// </summary>
        /// <param name="sceneName">Scene name.</param>
        public static void LoadSubScene(string sceneName)
        {
            s_subSceneNames.Add(sceneName);

                        #if UNITY_EDITOR
            if (Common.IsDebug)
            {
                SceneManager.LoadScene(sceneName, LoadSceneMode.Additive);
                return;
            }
                        #endif

            // 先加载场景对应的 AssetBundle
            ABI abi = ResManager.GetAbi(ResManager.GetPathMD5(sceneName));
            if (abi.ab == null)
            {
                ABLoader.ParseFilePath(abi);
                abi.ab = AssetBundle.LoadFromFile(abi.filePath);
            }
            // 再载入场景
            SceneManager.LoadScene(sceneName);
        }
Example #4
0
        private static IEnumerator DoLoadSceneAsync()
        {
            DispatchLuaEvent(EVENT_START, s_sceneName);
            ABI abi = ResManager.GetAbi(ResManager.GetPathMD5(s_sceneName));

            if (abi.ab == null)
            {
                // 先异步加载场景对应的 AssetBundle
                ABLoader.ParseFilePath(abi);
                s_abcr = AssetBundle.LoadFromFileAsync(abi.filePath);
                yield return(s_abcr);

                abi.ab = s_abcr.assetBundle;
                s_abcr = null;
            }

            // 再异步加载场景
            s_ao = SceneManager.LoadSceneAsync(s_sceneName);
            yield return(s_ao);

            s_ao           = null;
            s_alcCoroutine = null;
            DispatchLuaEvent(EVENT_COMPLETE, s_sceneName);
        }