コード例 #1
0
        /// <summary>
        ///   异步加载场景
        /// </summary>
        public static bool LoadSceneAsync(out AsyncOperation ao
                                          , string scene_name
                                          , System.Action <string> callback = null
                                          , LoadSceneMode mode = LoadSceneMode.Single)
        {
            ao = null;
            if (LoadPattern.ResourcesLoadPattern == emLoadPattern.AssetBundle ||
                LoadPattern.ResourcesLoadPattern == emLoadPattern.All)
            {
                ao = AssetBundleManager.Instance.LoadSceneAsync(scene_name, mode);
                if (ao != null)
                {
                    CoroutineExecutor.Create(ao, () =>
                    {
                        GenerateSceneObject(scene_name);
                        if (callback != null)
                        {
                            callback(scene_name);
                        }
                    });
                    return(true);
                }
            }
            if (LoadPattern.ResourcesLoadPattern == emLoadPattern.Original ||
                LoadPattern.ResourcesLoadPattern == emLoadPattern.All)
            {
                if (!Application.CanStreamedLevelBeLoaded(scene_name))
                {
                    return(false);
                }

                ao = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(scene_name, mode);
                if (ao != null)
                {
                    CoroutineExecutor.Create(ao, () =>
                    {
                        if (callback != null)
                        {
                            callback(scene_name);
                        }
                    });
                    return(true);
                }
            }
            return(false);
        }
コード例 #2
0
        /// <summary>
        ///   异步加载场景
        /// </summary>
        public static bool LoadSceneAsync(out SceneLoadRequest req
                                          , string scene_name
                                          , System.Action <string> callback = null
                                          , LoadSceneMode mode = LoadSceneMode.Single)
        {
            req = null;

#if UNITY_EDITOR
            if (LoadPattern.SceneLoadPattern == emLoadPattern.EditorAsset ||
                LoadPattern.SceneLoadPattern == emLoadPattern.All)
            {
                if (!Application.CanStreamedLevelBeLoaded(scene_name))
                {
                    return(false);
                }

                var ao = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(scene_name, mode);
                if (ao != null)
                {
                    req = new SceneLoadRequest(ao);
                    CoroutineExecutor.Create(req, () =>
                    {
                        if (callback != null)
                        {
                            callback(scene_name);
                        }
                    });
                    return(true);
                }
            }
#endif

            if (LoadPattern.SceneLoadPattern == emLoadPattern.AssetBundle ||
                LoadPattern.SceneLoadPattern == emLoadPattern.All)
            {
                req = AssetBundleManager.Instance.LoadSceneAsync(scene_name, mode);
                if (req != null)
                {
                    CoroutineExecutor.Create(req, () =>
                    {
                        GenerateSceneObject(scene_name);
                        if (callback != null)
                        {
                            callback(scene_name);
                        }
                    });
                    return(true);
                }
            }
            if (LoadPattern.SceneLoadPattern == emLoadPattern.Original ||
                LoadPattern.SceneLoadPattern == emLoadPattern.All)
            {
                if (!Application.CanStreamedLevelBeLoaded(scene_name))
                {
                    return(false);
                }

                var ao = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(scene_name, mode);
                if (ao != null)
                {
                    req = new SceneLoadRequest(ao);
                    CoroutineExecutor.Create(req, () =>
                    {
                        if (callback != null)
                        {
                            callback(scene_name);
                        }
                    });
                    return(true);
                }
            }
            return(false);
        }