Loading Screen Manager, Loading screen manager

posted in: Weekly Progress | 0

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.SceneManagement;
public class LoadingScreenManager : MonoBehaviour {

[Header(“Loading Visuals”)] public Text loadingText;
[Header(“Timing Settings”)] public float waitOnLoadEnd = 0.25f;
public float fadeDuration = 0.25f;

[Header(“Loading Settings”)] public LoadSceneMode loadSceneMode = LoadSceneMode.Single;
public ThreadPriority loadThreadPriority;

[Header(“Other”)] // If loading additive, link to the cameras audio listener, to avoid multiple active audio listeners
public AudioListener audioListener;

AsyncOperation operation;
Scene currentScene;

public static int sceneToLoad = -1;
// IMPORTANT! This is the build index of your loading scene. You need to change this to match your actual scene index
static int loadingSceneIndex = 3;

public static void LoadScene(int levelNum)
{
Application.backgroundLoadingPriority = ThreadPriority.High;
sceneToLoad = levelNum;
SceneManager.LoadScene(loadingSceneIndex);
}

void Start()
{
if (sceneToLoad < 0)
return;
// fadeOverlay.gameObject.SetActive(true); // Making sure it’s on so that we can crossfade Alpha
currentScene = SceneManager.GetActiveScene();
StartCoroutine(LoadAsync(sceneToLoad));
}

private IEnumerator LoadAsync(int levelNum)
{
// ShowLoadingVisuals();
yield return null;

FadeIn();
StartOperation(levelNum);

float lastProgress = 0f;

// operation does not auto-activate scene, so it’s stuck at 0.9
while (DoneLoading() == false)
{
yield return null;

if (Mathf.Approximately(operation.progress, lastProgress) == false)
{
// progressBar.fillAmount = operation.progress;
lastProgress = operation.progress;
}
}

if (loadSceneMode == LoadSceneMode.Additive)
audioListener.enabled = false;

// ShowCompletionVisuals();

yield return new WaitForSeconds(waitOnLoadEnd);

FadeOut();

yield return new WaitForSeconds(fadeDuration);

if (loadSceneMode == LoadSceneMode.Additive)
SceneManager.UnloadScene(currentScene.name);
else
operation.allowSceneActivation = true;
}

private void StartOperation(int levelNum)
{
Application.backgroundLoadingPriority = loadThreadPriority;
operation = SceneManager.LoadSceneAsync(levelNum, loadSceneMode);
if (loadSceneMode == LoadSceneMode.Single)
operation.allowSceneActivation = false;
}

private bool DoneLoading()
{
return (loadSceneMode == LoadSceneMode.Additive && operation.isDone) || (loadSceneMode == LoadSceneMode.Single && operation.progress >= 0.9f);
}

void FadeIn()
{
// fadeOverlay.CrossFadeAlpha(0, fadeDuration, true);
}

void FadeOut()
{
// fadeOverlay.CrossFadeAlpha(1, fadeDuration, true);
}

Leave a Reply