unity 场景管理器(单例)

很久以前的设计…

/***
*	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();
    }
}

发布了77 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Icecoldless/article/details/104078814
今日推荐