示例#1
0
        private IEnumerator Fade(FadeDirection fadeDirection)
        {
            float alpha        = (fadeDirection == FadeDirection.Out) ? 1 : 0;
            float fadeEndValue = (fadeDirection == FadeDirection.Out) ? 0 : 1;

            if (fadeDirection == FadeDirection.Out)
            {
                while (alpha >= fadeEndValue)
                {
                    SetColorImage(ref alpha, fadeDirection);
                    yield return(null);
                }
                fadeOutUIImage.enabled = false;
                OnSceneLoadComplete?.Invoke();
            }
            else
            {
                OnSceneLoadStarted?.Invoke();
                fadeOutUIImage.enabled = true;
                while (alpha <= fadeEndValue)
                {
                    SetColorImage(ref alpha, fadeDirection);
                    yield return(null);
                }
            }
        }
示例#2
0
        public SceneHandler UnloadSceneAsync(string address,
                                             OnSceneLoadProgress progress,
                                             OnSceneLoadComplete complete,
                                             SystemObject userData)
        {
            if (assetLoader != null)
            {
                string scenePath = assetLoader.GetAssetPathByAddress(address);
                if (string.IsNullOrEmpty(scenePath))
                {
                    DebugLog.Error(AssetConst.LOGGER_NAME, "scenePath is null.address = " + address);
                    return(null);
                }
                SceneLoaderData data = new SceneLoaderData();
                data.InitUnloadData(address, scenePath, complete, progress, userData);
                loaderDatas.Add(data);

                return(data.handler);
            }
            else
            {
                DebugLog.Error(AssetConst.LOGGER_NAME, "assetloader is not init");
                return(null);
            }
        }
示例#3
0
 /// <summary>
 /// 加载场景
 /// </summary>
 /// <param name="pathOrAddress">路径/地址</param>
 /// <param name="completeCallback">场景加载完成委托</param>
 /// <param name="progressCallback">场景加载进度委托</param>
 /// <param name="loadMode">加载方式</param>
 /// <param name="activateOnLoad">是否激活场景,(没有到这个参数呀)</param>
 /// <param name="userData">携带参数</param>asa
 /// <returns></returns>
 public static SceneLoaderHandle LoadSceneAsync(string pathOrAddress,
                                                OnSceneLoadComplete completeCallback,
                                                OnSceneLoadProgress progressCallback,
                                                LoadSceneMode loadMode = LoadSceneMode.Single,
                                                bool activateOnLoad    = true,
                                                SystemObject userData  = null)
 {
     return(AssetMgr.GetInstance().LoadSceneAsync(pathOrAddress, completeCallback, progressCallback, loadMode, activateOnLoad, userData));
 }
示例#4
0
 /// <summary>
 /// 卸载指定的场景
 /// </summary>
 /// <param name="address">场景地址</param>
 /// <param name="complete">卸载完毕后回调</param>
 /// <param name="progress">卸载进度回调</param>
 /// <param name="userData">自定义参数</param>
 /// <returns></returns>
 public SceneHandler UnloadSceneAsync(string address,
                                      OnSceneLoadProgress progress,
                                      OnSceneLoadComplete complete,
                                      SystemObject userData = null)
 {
     if (sceneLoader == null)
     {
         DebugLog.Error(AssetConst.LOGGER_NAME, "AssetManager::UnloadSceneAsync->loader hasn't been inited");
         return(null);
     }
     return(sceneLoader.UnloadSceneAsync(address, progress, complete, userData));
 }
示例#5
0
        /// <summary>
        /// 加载场景
        /// </summary>
        /// <param name="pathOrAddress">地址</param>
        /// <param name="completeCallback">完成后回调</param>
        /// <param name="progressCallback">加载进度回调</param>
        /// <param name="loadMode">场景加载模式</param>
        /// <param name="activateOnLoad">是否立即激活</param>
        /// <param name="userData">自定义数据</param>
        /// <returns></returns>
        public SceneLoaderHandle LoadSceneAsync(string pathOrAddress,
                                                OnSceneLoadComplete completeCallback,
                                                OnSceneLoadProgress progressCallback,
                                                LoadSceneMode loadMode = LoadSceneMode.Single,
                                                bool activateOnLoad    = true,
                                                SystemObject userData  = null)
        {
            bool isSceneLoaded = m_LoadedSceneHandles.Any((sHandle) =>
            {
                return(sHandle.PathOrAddress == pathOrAddress);
            });

            if (isSceneLoaded)
            {
                Debug.LogError($"SceneAssetLoader::LoadSceneAsync->Scene has been loaded.pathOrAddress={pathOrAddress}");
                return(null);
            }
            bool isSceneLoading = m_LoadingSceneDatas.Any((loadData) =>
            {
                return(loadData.PathOrAddress == pathOrAddress);
            });

            if (isSceneLoading)
            {
                Debug.LogError($"SceneAssetLoader::LoadSceneAsync->Scene is in loading.pathOrAddress={pathOrAddress}");
                return(null);
            }

            string assetPath = m_AssetLoader.GetAssetPath(pathOrAddress);
            string sceneName = Path.GetFileNameWithoutExtension(assetPath);

            SceneLoadData loaderData = new SceneLoadData();

            loaderData.PathOrAddress    = pathOrAddress;
            loaderData.AssetPath        = assetPath;
            loaderData.CompleteCallback = completeCallback;
            loaderData.ProgressCallback = progressCallback;
            loaderData.LoadMode         = loadMode;
            loaderData.ActivateOnLoad   = activateOnLoad;
            loaderData.UserData         = userData;

            SceneLoaderHandle handle = new SceneLoaderHandle();

            handle.PathOrAddress   = pathOrAddress;
            handle.AssetPath       = assetPath;
            handle.SceneName       = sceneName;
            loaderData.SceneHandle = handle;

            m_LoadingSceneDatas.Add(loaderData);

            return(handle);
        }
示例#6
0
 /// <summary>
 /// 加载场景
 /// </summary>
 /// <param name="pathOrAddress">路径/地址</param>
 /// <param name="completeCallback">场景加载完成委托</param>
 /// <param name="progressCallback">场景加载进度委托</param>
 /// <param name="loadMode">加载方式</param>
 /// <param name="activateOnLoad">是否激活场景,(没有到这个参数呀)</param>
 /// <param name="userData">携带参数</param>
 /// <returns></returns>
 public SceneLoaderHandle LoadSceneAsync(string pathOrAddress,
                                         OnSceneLoadComplete completeCallback,
                                         OnSceneLoadProgress progressCallback,
                                         LoadSceneMode loadMode = LoadSceneMode.Single,
                                         bool activateOnLoad    = true,
                                         SystemObject userData  = null)
 {
     if (m_SceneLoader == null)
     {
         Debug.LogError("AssetManager::LoadSceneAsync->sceneLoader has not been inited");
         return(null);
     }
     return(m_SceneLoader.LoadSceneAsync(pathOrAddress, completeCallback, progressCallback, loadMode, activateOnLoad, userData));
 }
示例#7
0
        /// <summary>
        /// 异步加载并初始化场景。场景的加载分为两步,一是加载场景资源及其依赖资源,二是初始化场景
        /// </summary>
        /// <param name="address">场景地址</param>
        /// <param name="complete">加载及初始化完成后回调</param>
        /// <param name="progress">加载进度回调</param>
        /// <param name="mode">加载模式<see cref="LoadSceneMode"/></param>
        /// <param name="activateOnLoad">场景加载完毕后是否立即激活所有的根结点</param>
        /// <param name="userData">自定义参数</param>
        /// <returns></returns>
        public SceneHandler LoadSceneAsync(string address,
                                           OnSceneLoadProgress progress,
                                           OnSceneLoadComplete complete,
                                           LoadSceneMode mode    = LoadSceneMode.Single,
                                           bool activateOnLoad   = true,
                                           SystemObject userData = null)
        {
            if (sceneLoader == null)
            {
                DebugLog.Error(AssetConst.LOGGER_NAME, "AssetManager::LoadSceneAsync->loader hasn't been inited");
                return(null);
            }

            return(sceneLoader.LoadSceneAsync(address, progress, complete, mode, activateOnLoad, userData));
        }
            public async Task LoadSceneAsync(string sceneName)
            {
                OnBeforeSceneChange.Invoke(_activeSceneLowLevelInfos.Scene);
                await UnloadActiveSceneAsync();

                _activeSceneLowLevelInfos.Reset();
                _activeSceneInfos = null;
                _activeSceneLowLevelInfos.SceneName = sceneName;

                _activeSceneLowLevelInfos.IsMenuScene = sceneName.ToLower().Contains("menu");
                if (_activeSceneLowLevelInfos.IsMenuScene == false)
                {
                    OnBeforeGameSceneLoad.Invoke();
                }

                AsyncOperation op = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);

                while (op.isDone == false)
                {
                    _activeSceneLowLevelInfos.LoadProgress = op.progress * 0.7f;
                    await Task.Delay(10);
                }
                _activeSceneLowLevelInfos.LoadProgress = 0.7f;

                Scene scene = SceneManager.GetSceneByName(sceneName);

                _activeSceneLowLevelInfos.SceneIndex = scene.buildIndex;
                _activeSceneLowLevelInfos.Scene      = scene;
                SceneManager.SetActiveScene(scene);

                FindSceneInfos(ref scene);

                if (_activeSceneLowLevelInfos.IsMenuScene == false)
                {
                    OnAfterGameSceneLoad.Invoke(_activeSceneLowLevelInfos.Scene);
                }
                OnAfterSceneChange.Invoke(_activeSceneLowLevelInfos.Scene);

                if (_activeSceneInfos != null)
                {
                    while (_activeSceneInfos.LoadingComplete == false)
                    {
                        await Task.Delay(10);
                    }
                }

                OnSceneLoadComplete.Invoke(_activeSceneLowLevelInfos.Scene);
            }
示例#9
0
        public void InitUnloadData(
            string address,
            string path,
            OnSceneLoadComplete complete,
            OnSceneLoadProgress progress,
            SystemObject userData)
        {
            this.address     = address;
            this.scenePath   = path;
            this.sceneName   = Path.GetFileNameWithoutExtension(path);
            completeCallback = complete;
            progressCallback = progress;
            this.userData    = userData;

            handler = new SceneHandler(address, sceneName, scenePath);
            state   = SceneLoaderDataState.Unload;
        }
示例#10
0
        public void InitLoadData(
            string address,
            string path,
            OnSceneLoadComplete complete,
            OnSceneLoadProgress progress,
            LoadSceneMode sceneMode,
            bool isActive,
            SystemObject userData)
        {
            this.address            = address;
            this.scenePath          = path;
            this.sceneName          = Path.GetFileNameWithoutExtension(path);
            completeCallback        = complete;
            progressCallback        = progress;
            this.sceneMode          = sceneMode;
            this.isActiveWhenLoaded = isActive;
            this.userData           = userData;

            handler = new SceneHandler(address, sceneName, scenePath);
            state   = SceneLoaderDataState.Load;
        }
            private async void HandleFindAndLoadActiveGameScene()
            {
                if (_activeSceneLowLevelInfos.SceneIndex == -1)
                {
                    Scene activeScene       = SceneManager.GetActiveScene();
                    bool  isGameSceneActive = PinouConstants.IS_GAME_SCENE(activeScene.name);
                    if (isGameSceneActive == false)
                    {
                        for (int i = 0; i < SceneManager.sceneCount; i++)
                        {
                            Scene scene = SceneManager.GetSceneAt(i);
                            if (PinouConstants.IS_GAME_SCENE(scene.name))
                            {
                                SceneManager.SetActiveScene(scene);
                                isGameSceneActive = true;
                            }
                        }
                    }

                    if (isGameSceneActive == true)
                    {
                        _activeSceneLowLevelInfos.SceneLoaded  = true;
                        _activeSceneLowLevelInfos.IsMenuScene  = activeScene.name.ToLower().Contains("menu");
                        _activeSceneLowLevelInfos.SceneIndex   = activeScene.buildIndex;
                        _activeSceneLowLevelInfos.LoadProgress = 1f;
                        _activeSceneLowLevelInfos.SceneName    = activeScene.name;
                        _activeSceneLowLevelInfos.Scene        = activeScene;

                        FindSceneInfos(ref activeScene);

                        await Task.Delay(1);

                        OnSceneLoadComplete.Invoke(_activeSceneLowLevelInfos.Scene);
                    }
                    else
                    {
                        Debug.Log("No Game Scene found.");
                    }
                }
            }
示例#12
0
    IEnumerator Start()
    {
        foreach (var obj in initializebles)
        {
            var initializable = (obj as IInitializable);

            initializable?.Init();
        }

        foreach (var obj in initializebles)
        {
            var initializable = (obj as IInitializable);

            if (initializable == null)
            {
                continue;
            }

            yield return(new WaitUntil(() => initializable.Initialized));
        }

        OnSceneLoadComplete?.Invoke();
        yield return(null);
    }
示例#13
0
 private void OnEndTransition() => OnSceneLoadComplete?.Invoke();