Unity场景进度条加载

首先,创建Canvas,在Canvas中创建一个Button和一个Panel

Button:点击之后进入场景加载

Panel:场景加载面板

 其次,在panel当中,我们在创建slider和Text

Text:用来描述进度条的百分比,所以text可有可无,看自己意愿

 

slider :就是我们的进度条了

Panel建好后,将SetActive设置为false,因为进度条要在点击Button后才会出现

 

所有gameobject创建好后,我们就可以开始写脚本了。关于进度条的脚本,我习惯创建一个空物体,然后将脚本挂个空物体

关于脚本,我们主要是用到的方法是AsyncOperation,异步协程,先来说一下吗要用到的这个方法中的一些变量

allowSceneActivation,是否在场景加载结束后立即加载场景 

isDone,操作是否完成

progress,操作进度,范围在0~1

接下来,就是脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//UI界面
using UnityEngine.SceneManagement;//场景管理
public class Lo : MonoBehaviour
{
    public GameObject loadscene;//进度条加载场景,就是之前创建的Panel
    public Text text;//之前创建的Text
    public Slider slider;//创建的进度条

    public void loadNext() {
        StartCoroutine(load());//调用协程
    }
    IEnumerator load() {
        loadscene.SetActive(true);//将Panel打开
        //op等于下一个加载的场景,这里不能用LoadScene,因为LoadScene会直接挑跳转到下一个场景,所以用LoadSceneAsync
        //SceneManager.GetActiveScene().buildIndex,获得当前的场景的编号在加1,就是下一个场景
        AsyncOperation op = SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex+1);
        op.allowSceneActivation = false;//如果为true,那么加载结束后直接就会跳转,我们根本看不见加载的过程
        while (!op.isDone) {//如果操作没有结束
            slider.value = op.progress;//将操作进度的值赋给slider
            text.text = op.progress * 100 + "%";//表示百分数
            //op.allowSceneActivation = false后,op.progress最多等于0.9,所以想要到1,我们要自己设置
            if (op.progress >= 0.9f)
            {
                slider.value = 1;
                text.text = "输入任意按键";//输入任意键,跳转到下一场景
                if (Input.anyKeyDown)
                {
                    op.allowSceneActivation = true;
                }
            }
            yield return null;
        }

    }
}

猜你喜欢

转载自blog.csdn.net/qq_52783514/article/details/121433602