public void ChangeSceneWithLoadScreen(string currentSceneName, string nextSceneName)
    {
        LoadScreenOptions options = new LoadScreenOptions();

        options.LoadScreenBehvavior = LoadScreenBehvavior.None;
        ChangeSceneWithLoadScreen(currentSceneName, nextSceneName, () => { }, options);
    }
    private IEnumerator AsyncLoadLoadScreen(string nextSceneName, Action preloadAction, LoadScreenOptions options)
    {
        AsyncOperation sceneLoadOperation = SceneManager.LoadSceneAsync("Loading", LoadSceneMode.Additive);

        while (!sceneLoadOperation.isDone)
        {
            yield return(new WaitForEndOfFrame());
        }
        yield return(AsyncLoadSceneWithLoadScreen("Loading", nextSceneName, preloadAction, options));
    }
 public void LoadSceneWithLoadScreen(string sceneName, Action preloadAction, LoadScreenOptions options)
 {
     StartCoroutine(AsyncLoadLoadScreen(sceneName, preloadAction, options));
 }
 public void LoadSceneWithLoadScreen(string sceneName, LoadScreenOptions options)
 {
     StartCoroutine(AsyncLoadLoadScreen(sceneName, () => { }, options));
 }
 public void ChangeSceneWithLoadScreen(string currentSceneName, string nextSceneName, Action preloadAction, LoadScreenOptions options)
 {
     SceneManager.UnloadSceneAsync(currentSceneName);
     StartCoroutine(AsyncLoadLoadScreen(nextSceneName, preloadAction, options));
 }
    private IEnumerator AsyncLoadSceneWithLoadScreen(string currentSceneName, string nextSceneName, Action preloadAction, LoadScreenOptions options)
    {
        GameObject loadBarGameObject = GameObject.FindGameObjectsWithTag("LoadBar")[0];
        Image      loadBar           = loadBarGameObject.GetComponent <Image>();

        loadBar.fillAmount = 0;
        yield return(new WaitForSeconds(1));

        AsyncOperation sceneLoadOperation = SceneManager.LoadSceneAsync(nextSceneName, LoadSceneMode.Additive);

        sceneLoadOperation.allowSceneActivation = false;
        while (sceneLoadOperation.progress < 0.9f)
        {
            loadBar.fillAmount = (sceneLoadOperation.progress + 0.1f) * 0.5f;
        }
        yield return(new WaitForSeconds(1));

        preloadAction();
        loadBar.fillAmount = 1f;
        if (options.LoadScreenBehvavior.Equals(LoadScreenBehvavior.WaitSeconds))
        {
            yield return(new WaitForSeconds(options.Seconds));
        }
        else if (options.LoadScreenBehvavior.Equals(LoadScreenBehvavior.SpecificKey))
        {
            while (!sceneLoadOperation.isDone)
            {
                if (Input.GetKeyDown(options.KeyCode))
                {
                    break;
                }
                yield return(null);
            }
        }
        else if (options.LoadScreenBehvavior.Equals(LoadScreenBehvavior.AnyKey))
        {
            while (!sceneLoadOperation.isDone)
            {
                if (Input.anyKeyDown)
                {
                    break;
                }
                yield return(null);
            }
        }
        sceneLoadOperation.allowSceneActivation = true;
        SceneManager.UnloadSceneAsync(currentSceneName);
    }