目录
前言
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