作用:提供场景切换的公共接口
SceneMgr.cs
继承单例模式基类,运用事件中心可以在场景异步加载时分发场景加载进度情况
单例模式基类
事件中心
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
/// <summary>
/// 场景切换模块
/// 1.场景异步加载
/// 2.协程
/// 3.委托
/// </summary>
public class ScenesMgr : BaseMgr<ScenesMgr>
{
/// <summary>
/// 同步场景加载
/// </summary>
/// <param name="name"></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 LoadSceneAsyn(string name, UnityAction fun)
{
MonoMgr.instance.StartCoroutine(ReallyLoadSceneAsyn(name, fun));
}
/// <summary>
/// 协程异步加载场景
/// </summary>
/// <param name="name"></param>
/// <param name="fun"></param>
/// <returns></returns>
private IEnumerator ReallyLoadSceneAsyn(string name,UnityAction fun)
{
AsyncOperation ao= SceneManager.LoadSceneAsync(name);
//可以得到场景加载的一个进度(0-1)可以做loading条
while (!ao.isDone)
{
//用事件中心去分发进度情况 外面想用就用
EventCenter.instance.EventTrigger("进度条更新", ao.progress);
//这里面去更新进度条
yield return ao.progress;
}
//加载完后执行方法
fun();
}
}
测试
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestScene : MonoBehaviour
{
public void LoadBlue()
{
ScenesMgr.instance.LoadSceneAsyn("blue",speak);
}
public void LoadRed()
{
ScenesMgr.instance.LoadSceneAsyn("red", speak);
}
public void speak()
{
Debug.Log("切换成功");
}
}