前言
Unity中常见的加载场景就是异步加载场景,此博客对异步加载场景进行详细介绍
简单易懂好用。含有加载进度,加载动画等。(文末附工程)
代码分析
主要脚本MaskPanel ,作为单例存在于场景中,下面对此脚本进行介绍
字段解析
/// <summary>/// 滑动条/// </summary>[SerializeField][Header("滑动条")]private Slider m_Slider;/// <summary>/// 加载进度/// </summary>[SerializeField][Header("加载进度")]private Text processText;/// <summary>/// 加载动画/// </summary>[SerializeField][Header("加载动画图片")]private Transform loadImage;/// <summary>/// 动画播放速度/// </summary>[Range(0f, 360f)][Header("动画播放速度")]public float speed = 5f;/// <summary>/// CanvasGroup/// </summary>[SerializeField][Header("加载动画图片")]private CanvasGroup canvasGroup;
上述代码为字段部分,将接口暴露出来,拖动相应的object到其中,后期用于显示
属性解析
/// <summary>/// 设置进度属性/// </summary>public float Process{set{//设置滑动条m_Slider.value = value;//设置进度文字processText.text = string.Format("{0:F0}%", value * 100);}}/// <summary>/// 设置动画/// </summary>private void Update(){//加载动画loadImage.Rotate(Vector3.forward, -speed * Time.deltaTime, Space.Self);}
上述代码利用属性将滑动条,进度进行设置。在Update中设置动画的旋转。
异步加载场景解析
/// <summary>/// 异步加载场景(当加载一般场景的时候速度非常之快)/// </summary>/// <param name="name">场景名字</param>/// <returns></returns>public IEnumerator LoadSceneAsync(string name){//打开遮罩OpenPanel();//异步操作AsyncOperation asyncLoad = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(name);while (!asyncLoad.isDone){//对数值进行赋值Process = asyncLoad.progress;yield return 0;}//关闭遮罩ClosePanel();}
上述为核心代码,异步加载场景。可以注入场景加载开始时进行的事件和场景加载结束时进行的事件。进行异步操作,当没结束的时候进行循环输出进度信息,加载结束的时候跳出循环
调用接口实现
private void Update(){if (Input.GetKeyDown(KeyCode.Space)){StartCoroutine(MaskPanel.Instance.LoadSceneAsync("SecondScene"));}}
即可实现对场景的加载
资源地址
异步场景加载简单易懂好用资源-CSDN文库https://download.csdn.net/download/liuhongze98/88795256