Unity实现异步加载场景

一:创建UGUI

首先我们在LoginCanvas登入面板下面创建一个Panel,取名为LoadScreen,再在loadScreen下面创建一个Image组件,放置背景图片,然后我们再在lpadScreen下面继续创建一个Slider,这个是用来加载进度条的,我们改名为LoadSlider。我们为什么需要改名字,为了见名之一,不至于过段时间看见不认识已经忘记了,所以我们需要更改名字。加载如果需要进度条对应文字,比如百分之多少。那么我们还需要在下面创建一个Text文本组件。

 二:设置UGUI下面的组件

1. Image组件设置

2. LoadSlider进度条组件设置

方向进度条一般都是默认从左到右,当然也可以设置其他样式,下面Value值是用来滑动进度条的,当我们的Value值变化进度条也会变化,他们是相当于的。

 

 填充区域我们设置的颜色是红色,相当于进度条加载的颜色,如上图所述,我们设置的是红色,所以加载进度条是用红色填充,需要上面颜色自己设置对应的颜色即可。

 这个是Handle,相当于进度条移动带有的标志,如下图所试。如果不需要可自己禁用掉Handle组件或者删除。下图是用到了一个加载图,所以有一个加载图标在上面。下图中已经标出图标所在处。

 

 3. LoadText加载文本组件设置。

由于我们设置在LoadSlider加载进度条组件里面,所以我们设置的锚点应该居中,然后调整LoadText加载文本组件的大小,在文本输入区域输入0%,调整不同的字体和样式、大小、对齐方式、颜色。

四:创建空物体

创建空物体后我们取名为LoadManager,专门用来管理加载场景的。

五:代码实现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class LoadManager : MonoBehaviour
{
    // Start is called before the first frame update

    //加载调过程显示内容
    public GameObject LoadScreen;
    //加载条
    public Slider LoadSlider;
    //进度条文本显示
    public Text LoadText;

    public void LoadNextScene()
    {

        //默认为0
        LoadSlider.value = 0;

        //开启协程
        StartCoroutine(LoadScene());
        //开启加载过程内容
        LoadScreen.SetActive(true);
    }
    // Update is called once per frame
    IEnumerator LoadScene()
    {
        //异步加载下一个场景
        AsyncOperation operation = SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex + 1);
        //不要直接跳转到下一个场景
        operation.allowSceneActivation = false;
        //如果加载没有完成
        while (!operation.isDone)
        {
            //加载小于百分之90
            if(operation.progress < 0.9f)
            {
                LoadSlider.value = operation.progress;
                if(operation.progress==0.5f)
                    yield return new WaitForSeconds(1);
            }
            else
            {
                //大于百分之90直接默认加载完成
                LoadSlider.value = 1.0f;
            }
            //显示文本   转换成整数
            LoadText.text = (int)(LoadSlider.value * 100) + "%";

            if (LoadSlider.value >= 0.9)
            {
                //播放音效
               // LoadAudioSource.Play();

                //加载场景
                operation.allowSceneActivation = true;
            }
            yield return null;
        }
    }
}

六:回到Unity引擎

 七:实现效果

Unity异步加载场景


 最后解答:

 为什么我们要使用异步加载呢?

        异步 优点:速度快,与主线程无关。

        缺点:调用比较麻烦,因为你不知道啥时候你的资源准备好了,最好的做法也是使用回调,这样回调就会很多,很乱个人感觉管理起来很不舒服。

并且使用异步加载我们也会感觉比较美观并且有点高级感,同步加载是自己加载出来,速度没有异步快,但是管理方便。

猜你喜欢

转载自blog.csdn.net/weixin_57813136/article/details/132270592