很久以前的设计…
/***
* Title:
* 场景管理器
* Description:
* 实现场景的各种加载
* 公开异步操作数给Loading界面使用
*/
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
public class LevelManager : SingletonMono<LevelManager>
{
int SceneIndex = 0;
public AsyncOperation LoadingProcess;
// Use this for initialization
void Start()
{
GameObject.DontDestroyOnLoad(this);
}
public static void InitLoad()
{
new GameObject("LevelMgr").AddComponent<LevelManager>();
}
public void LoadNext()
{
SceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneIndex++;
SceneManager.LoadScene(SceneIndex);
}
public void LoadBack()
{
SceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneIndex--;
if (SceneIndex >= 0)
SceneManager.LoadScene(SceneIndex);
}
public void LoadAgain()
{
SceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(SceneIndex);
}
public void LoadScene(int index)
{
SceneManager.LoadScene(index);
}
public void LoadScene(string sceneName)
{
SceneManager.LoadScene(sceneName);
}
public IEnumerator LoadSceneAsync(string sceneName)
{
LoadingProcess = SceneManager.LoadSceneAsync(sceneName);
yield return LoadingProcess;
}
/// <summary>
/// 输入一个场景的名称,
/// 先跳转到Loading场景在跳转进目标场景中
/// </summary>
/// <param name="sceneName"></param>
public void LoadSceneWithLoading(string sceneName)
{
Data.NextSceneName = sceneName;
LoadScene(Data.LoadingScene);
}
public IEnumerator LoadNextAsync()
{
SceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneIndex++;
LoadingProcess = SceneManager.LoadSceneAsync(SceneIndex);
yield return LoadingProcess;
}
public IEnumerator LoadBackAsync()
{
SceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneIndex--;
LoadingProcess = SceneManager.LoadSceneAsync(SceneIndex);
yield return LoadingProcess;
}
public IEnumerator LoadAgainAsync()
{
LoadingProcess = SceneManager.LoadSceneAsync(SceneIndex);
yield return LoadingProcess;
}
private void OnDisable()
{
StopAllCoroutines();
}
public void QuitGame()
{
Application.Quit();
}
}