1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.Events;
    5. using UnityEngine.SceneManagement;
    6. /// <summary>
    7. /// 场景切换模块
    8. /// 知识点
    9. /// 1.场景异步加载
    10. /// 2.协程
    11. /// 3.委托
    12. /// </summary>
    13. public class ScenesMgr : BaseManager<ScenesMgr>
    14. {
    15. /// <summary>
    16. /// 切换场景 同步
    17. /// </summary>
    18. /// <param name="name"></param>
    19. public void LoadScene(string name, UnityAction fun)
    20. {
    21. //场景同步加载
    22. SceneManager.LoadScene(name);
    23. //加载完成过后 才会去执行fun
    24. fun();
    25. }
    26. /// <summary>
    27. /// 提供给外部的 异步加载的接口方法
    28. /// </summary>
    29. /// <param name="name"></param>
    30. /// <param name="fun"></param>
    31. public void LoadSceneAsyn(string name, UnityAction fun)
    32. {
    33. MonoMgr.GetInstance().StartCoroutine(ReallyLoadSceneAsyn(name, fun));
    34. }
    35. /// <summary>
    36. /// 协程异步加载场景
    37. /// </summary>
    38. /// <param name="name"></param>
    39. /// <param name="fun"></param>
    40. /// <returns></returns>
    41. private IEnumerator ReallyLoadSceneAsyn(string name, UnityAction fun)
    42. {
    43. AsyncOperation ao = SceneManager.LoadSceneAsync(name);
    44. //可以得到场景加载的一个进度
    45. while(!ao.isDone)
    46. {
    47. //事件中心 向外分发 进度情况 外面想用就用
    48. EventCenter.GetInstance().EventTrigger("进度条更新", ao.progress);
    49. //这里面去更新进度条
    50. yield return ao.progress;
    51. }
    52. //加载完成过后 才会去执行fun
    53. fun();
    54. }
    55. }