unity 场景管理(Loading界面加载)

本文介绍了一种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--;
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JustEasyCode

谢谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值