场景切换模块:提供场景切换的公共接口。提供同步切换场景,异步切换场景并使用事件中心模块EventCenter
提供加载进度信息。ScenesMgr
脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
/// <summary>
/// 场景加载模块
/// 1.场景异步加载
/// 2.协程
/// 3.委托
/// </summary>
public class ScenesMgr : Singleton<ScenesMgr>
{
/// <summary>
/// 同步 切换场景
/// </summary>
/// <param name="name"></param>
/// <param name="fun"></param>
public void LoadScene(string name,UnityAction fun)
{
//场景同步加载
SceneManager.LoadScene(name);
//加载完成后执行 fun
fun();
}
/// <summary>
/// 提供给外部的 异步加载的接口方法
/// </summary>
/// <param name="name">场景名字</param>
/// <param name="fun">委托</param>
public void LoadSceneAsync(string name,UnityAction fun)
{
MonoMgr.GetInstance().StartCoroutine(TLoadSceneAsyne(name, fun));
}
/// <summary>
/// 协程异步加载场景
/// </summary>
/// <param name="name">场景名字</param>
/// <param name="fun">委托</param>
/// <returns></returns>
public IEnumerator TLoadSceneAsyne(string name, UnityAction fun)
{
AsyncOperation ao =SceneManager.LoadSceneAsync(name);
while (!ao.isDone)
{
//事件中心 向外分发 进度情况 外面想用就用
EventCenter.GetInstance().EventTrigger("进度条更新", ao.progress);
//在此更新进度条
yield return ao.progress;
}
//加载完成后 才会执行fun
fun();
}
}