Beispiel #1
0
    private IEnumerator StartLoading(string sceneName)
    {
        int displayProgress = 0;
        int toProgress      = 0;

        //AsyncOperation op = Application.LoadLevelAsync(scene);
        SGK.SceneService.GetInstance().Callback(0);
        ResourceBundle.LoadScenes(sceneName);
        AsyncOperation op = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Single);

        op.allowSceneActivation = false;
        while (op.progress < 0.9f)
        {
            toProgress = (int)op.progress * 100;
            while (displayProgress < toProgress)
            {
                ++displayProgress;
                SetLoadingPercentage(displayProgress);
                yield return(new WaitForEndOfFrame());
            }
            yield return(new WaitForEndOfFrame());
        }

        toProgress = 100;
        while (displayProgress < toProgress)
        {
            ++displayProgress;
            SetLoadingPercentage(displayProgress);
            yield return(new WaitForEndOfFrame());
        }

        op.allowSceneActivation = true;

        while (!op.isDone)
        {
            yield return(new WaitForEndOfFrame());
        }

        SGK.SceneService.GetInstance().Callback(1);

        if (callback != null)
        {
            callback();
        }

        SGK.SceneService.GetInstance().Callback(2);
        Destroy(gameObject);

        SGK.SceneService.GetInstance().FinishLoading();
    }
Beispiel #2
0
    IEnumerator startNextScene(string name, bool useAnimate = false, System.Action callback = null)
    {
        if (useAnimate)
        {
            animator.gameObject.SetActive(true);
            animator.SetInteger("sta", 0);

            while (!animator.GetCurrentAnimatorStateInfo(0).IsName("load_ani2"))
            {
                yield return(null);
            }

            yield return(new WaitForSeconds(0.5f));
        }
        else
        {
            animator.gameObject.SetActive(false);
        }

        if (BeforeSceneUnload != null)
        {
            BeforeSceneUnload();
        }

        // Scene _currentScene = SceneManager.GetActiveScene();
        // yield return SceneManager.UnloadSceneAsync(_currentScene);
        ResourceBundle.LoadScenes(name);
        yield return(SceneManager.LoadSceneAsync(name, LoadSceneMode.Single));

        if (unloadResources)
        {
            SGK.ResourcesManager.UnloadUnusedAssets();
        }

        Scene newlyLoadedScene = SceneManager.GetSceneAt(SceneManager.sceneCount - 1);

        SceneManager.SetActiveScene(newlyLoadedScene);

        if (AfterSceneLoad != null)
        {
            AfterSceneLoad();
        }

        if (callback != null)
        {
            callback();
        }

        while (isLoading)
        {
            yield return(null);
        }

        if (useAnimate)
        {
            Debug.Log("load finished");
            animator.SetInteger("sta", 1);

            yield return(new WaitForSeconds(1.0f));
        }

        if (AfterSceneReady != null)
        {
            AfterSceneReady();
        }

        Destroy(gameObject);
        // SceneManager.UnloadSceneAsync(_currentScene);
    }