62 lines
1.5 KiB
C#
62 lines
1.5 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.Events;
|
||
using UnityEngine.SceneManagement;
|
||
|
||
/// <summary>
|
||
/// 场景切换模块
|
||
/// 1.场景异步加载
|
||
/// 2.协程
|
||
/// 3.委托
|
||
/// </summary>
|
||
public class ScenesMgr : BaseManager<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)
|
||
{
|
||
//通过mono公共模块开启协程,因为协程要继承mono
|
||
MonoMgr.GetInstance().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);
|
||
//可以得到场景加载的进度
|
||
while(!ao.isDone)
|
||
{
|
||
//事件中心 向外分发 进度情况 外面想用就用
|
||
EventCenter.GetInstance().EvennTrigger("进度条更新",ao.progress);
|
||
//这里面去更新进度条
|
||
yield return ao.progress;
|
||
}
|
||
|
||
|
||
//加载完成过后,才会执行fun
|
||
fun();
|
||
}
|
||
|
||
}
|