示例#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);
                }
            }
        }
            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);
            }
示例#3
0
        internal void DoComplete(Scene scene)
        {
            state = SceneLoaderDataState.Finished;

            handler.IsDone      = true;
            handler.TargetScene = scene;

            if (!isActiveWhenLoaded && scene.IsValid())
            {
                GameObject[] objs = scene.GetRootGameObjects();
                foreach (var obj in objs)
                {
                    obj.SetActive(false);
                }
            }

            progressCallback?.Invoke(address, 1.0f, userData);
            completeCallback?.Invoke(address, scene, userData);
        }
            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.");
                    }
                }
            }
示例#5
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);
    }
示例#6
0
 private void OnEndTransition() => OnSceneLoadComplete?.Invoke();