private static Scene[] GetScenesToUnload(MMAdditiveSceneLoadingManagerSettings.UnloadMethods unloaded)
        {
            switch (unloaded)
            {
            case MMAdditiveSceneLoadingManagerSettings.UnloadMethods.None:
                _initialScenes = new Scene[0];
                break;

            case MMAdditiveSceneLoadingManagerSettings.UnloadMethods.ActiveScene:
                _initialScenes = new Scene[1] {
                    SceneManager.GetActiveScene()
                };
                break;

            default:
            case MMAdditiveSceneLoadingManagerSettings.UnloadMethods.AllScenes:
                _initialScenes = MMScene.GetLoadedScenes();
                break;
            }
            return(_initialScenes);
        }
        /// <summary>
        /// Call this static method to load a scene from anywhere
        /// </summary>
        /// <param name="sceneToLoadName">Level name.</param>
        public static void LoadScene(string sceneToLoadName, string loadingSceneName = "MMAdditiveLoadingScreen",
                                     ThreadPriority threadPriority = ThreadPriority.High, bool secureLoad = true,
                                     bool interpolateProgress      = true,
                                     float beforeEntryFadeDelay    = 0f,
                                     float entryFadeDuration       = 0.25f,
                                     float afterEntryFadeDelay     = 0.1f,
                                     float beforeExitFadeDelay     = 0.25f,
                                     float exitFadeDuration        = 0.2f,
                                     MMTweenType entryFadeTween    = null, MMTweenType exitFadeTween = null,
                                     float progressBarSpeed        = 5f,
                                     FadeModes fadeMode            = FadeModes.FadeInThenOut,
                                     MMAdditiveSceneLoadingManagerSettings.UnloadMethods unloadMethod = MMAdditiveSceneLoadingManagerSettings.UnloadMethods.AllScenes)
        {
            if (_loadingInProgress)
            {
                Debug.LogError("MMLoadingSceneManagerAdditive : a request to load a new scene was emitted while a scene load was already in progress");
                return;
            }

            if (entryFadeTween == null)
            {
                entryFadeTween = new MMTweenType(MMTween.MMTweenCurve.EaseInOutCubic);
            }

            if (exitFadeTween == null)
            {
                exitFadeTween = new MMTweenType(MMTween.MMTweenCurve.EaseInOutCubic);
            }

            if (secureLoad)
            {
                _scenesInBuild = MMScene.GetScenesInBuild();

                if (!_scenesInBuild.Contains(sceneToLoadName))
                {
                    Debug.LogError("MMLoadingSceneManagerAdditive : impossible to load the '" + sceneToLoadName + "' scene, " +
                                   "there is no such scene in the project's build settings.");
                    return;
                }
                if (!_scenesInBuild.Contains(loadingSceneName))
                {
                    Debug.LogError("MMLoadingSceneManagerAdditive : impossible to load the '" + loadingSceneName + "' scene, " +
                                   "there is no such scene in the project's build settings.");
                    return;
                }
            }

            _loadingInProgress = true;
            _initialScenes     = GetScenesToUnload(unloadMethod);

            Application.backgroundLoadingPriority = threadPriority;
            _sceneToLoadName            = sceneToLoadName;
            _loadingScreenSceneName     = loadingSceneName;
            _beforeEntryFadeDelay       = beforeEntryFadeDelay;
            _entryFadeDuration          = entryFadeDuration;
            _entryFadeTween             = entryFadeTween;
            _afterEntryFadeDelay        = afterEntryFadeDelay;
            _progressInterpolationSpeed = progressBarSpeed;
            _beforeExitFadeDelay        = beforeExitFadeDelay;
            _exitFadeDuration           = exitFadeDuration;
            _exitFadeTween       = exitFadeTween;
            _fadeMode            = fadeMode;
            _interpolateProgress = interpolateProgress;

            SceneManager.LoadScene(_loadingScreenSceneName, LoadSceneMode.Additive);
        }