Unity异步加载场景

发布于:2024-05-23 ⋅ 阅读:(127) ⋅ 点赞:(0)

Unity异步加载场景

1、过渡场景


using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class Globe
{
    public static string nextSceneName;
}
public class LoadingTest : MonoBehaviour
{
    public Slider slider;//滑动条
    public Text text;//文本
    float loadPro = 0;
    // 用以接受异步加载的返回值
    AsyncOperation AsyncOp = null;
    string names;
    void Start()
    {
        slider.value = 0;
        AsyncOp = SceneManager.LoadSceneAsync(Globe.nextSceneName, LoadSceneMode.Single);//异步加载场景名为"Demo Valley"的场景,LoadSceneMode.Single表示不保留现有场景
        AsyncOp.allowSceneActivation = false;//allowSceneActivation =true表示场景加载完成后自动跳转,经测,此值默认为true
    }
    //点击按钮,开始加载下一场景,文本和进度条显示加载进度
    //void StartLoad()
    //{
    //    AsyncOp = SceneManager.LoadSceneAsync("nextSceneName", LoadSceneMode.Single);//异步加载场景名为"Demo Valley"的场景,LoadSceneMode.Single表示不保留现有场景
    //    AsyncOp.allowSceneActivation = false;//allowSceneActivation =true表示场景加载完成后自动跳转,经测,此值默认为true
    //}
    void Update()
    {
        if (AsyncOp != null)//如果已经开始加载
        {
            loadPro = AsyncOp.progress; //获取加载进度,此处特别注意:加载场景的progress值最大为0.9!!!
        }
        if (loadPro >= 0.9f)//因为progress值最大为0.9,所以我们需要强制将其等于1
        {
            loadPro = 1;
        }
        slider.value = Mathf.Lerp(slider.value, loadPro, 1 * Time.deltaTime);//滑动块的value以插值的方式紧跟进度值
        if (slider.value > 0.99f)
        {
            slider.value = 1;
            AsyncOp.allowSceneActivation = true;
        }
        text.text = string.Format("{0:F0}%", slider.value * 100);//文本中以百分比的格式显示加载进度
    }
    //#region 跳转场景
    //public void TiaoZhuanSceneBtn(string scenename)//跳转场景
    //{
    //    SceneManager.LoadScene(scenename);
    //}
    //public void LoadingBtn(string LoadName)//跳转加载场景
    //{
    //    Globe.nextSceneName = LoadName;
    //    SceneManager.LoadScene("Loading");
    //}
    //#endregion
}

2、调用方法

    public void LoadingBtn(string LoadName)//跳转加载场景
    {
        Globe.nextSceneName = LoadName;
        SceneManager.LoadScene("Loading");
    }

网站公告

今日签到

点亮在社区的每一天
去签到