很久以前的设计…这是单例的设计,需要挂载在游戏对象上。
/***
* 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--;

本文介绍了一种Unity游戏开发中的场景管理器设计,包括单例模式的应用、场景加载与回退、异步加载及状态机设计。通过具体代码示例,展示了如何实现高效的场景切换,特别关注异步加载过程的控制。
最低0.47元/天 解锁文章
1378

被折叠的 条评论
为什么被折叠?



