当前位置:   article > 正文

Unity异步加载场景

Unity异步加载场景

目录

前言

代码分析

字段解析

属性解析

异步加载场景解析

调用接口实现

资源地址


前言

Unity中常见的加载场景就是异步加载场景,此博客对异步加载场景进行详细介绍

简单易懂好用。含有加载进度加载动画等。(文末附工程)

代码分析

主要脚本MaskPanel ,作为单例存在于场景中,下面对此脚本进行介绍

字段解析

  1. /// <summary>
  2. /// 滑动条
  3. /// </summary>
  4. [SerializeField]
  5. [Header("滑动条")]
  6. private Slider m_Slider;
  7. /// <summary>
  8. /// 加载进度
  9. /// </summary>
  10. [SerializeField]
  11. [Header("加载进度")]
  12. private Text processText;
  13. /// <summary>
  14. /// 加载动画
  15. /// </summary>
  16. [SerializeField]
  17. [Header("加载动画图片")]
  18. private Transform loadImage;
  19. /// <summary>
  20. /// 动画播放速度
  21. /// </summary>
  22. [Range(0f, 360f)]
  23. [Header("动画播放速度")]
  24. public float speed = 5f;
  25. /// <summary>
  26. /// CanvasGroup
  27. /// </summary>
  28. [SerializeField]
  29. [Header("加载动画图片")]
  30. private CanvasGroup canvasGroup;

上述代码为字段部分,将接口暴露出来,拖动相应的object到其中,后期用于显示

属性解析

  1. /// <summary>
  2. /// 设置进度属性
  3. /// </summary>
  4. public float Process
  5. {
  6. set
  7. {
  8. //设置滑动条
  9. m_Slider.value = value;
  10. //设置进度文字
  11. processText.text = string.Format("{0:F0}%", value * 100);
  12. }
  13. }
  14. /// <summary>
  15. /// 设置动画
  16. /// </summary>
  17. private void Update()
  18. {
  19. //加载动画
  20. loadImage.Rotate(Vector3.forward, -speed * Time.deltaTime, Space.Self);
  21. }

上述代码利用属性将滑动条,进度进行设置。在Update中设置动画的旋转。

异步加载场景解析

  1. /// <summary>
  2. /// 异步加载场景(当加载一般场景的时候速度非常之快)
  3. /// </summary>
  4. /// <param name="name">场景名字</param>
  5. /// <returns></returns>
  6. public IEnumerator LoadSceneAsync(string name)
  7. {
  8. //打开遮罩
  9. OpenPanel();
  10. //异步操作
  11. AsyncOperation asyncLoad = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(name);
  12. while (!asyncLoad.isDone)
  13. {
  14. //对数值进行赋值
  15. Process = asyncLoad.progress;
  16. yield return 0;
  17. }
  18. //关闭遮罩
  19. ClosePanel();
  20. }

        上述为核心代码,异步加载场景。可以注入场景加载开始时进行的事件和场景加载结束时进行的事件。进行异步操作,当没结束的时候进行循环输出进度信息,加载结束的时候跳出循环

调用接口实现

  1. private void Update()
  2. {
  3. if (Input.GetKeyDown(KeyCode.Space))
  4. {
  5. StartCoroutine(MaskPanel.Instance.LoadSceneAsync("SecondScene"));
  6. }
  7. }

即可实现对场景的加载 

资源地址

异步场景加载简单易懂好用资源-CSDN文库https://download.csdn.net/download/liuhongze98/88795256

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/114192
推荐阅读
相关标签
  

闽ICP备14008679号