【Unity】Unity實現異步加載場景並顯示進度條

 兩個場景  一個當前場景 一個爲要加載的下一個場景

在第一個場景中做了一個加載UI用於顯示

代碼如下

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

public class Loading : MonoBehaviour
{
    private Slider loadingSlider;
    private Text loadingText;
    private GameObject Loading_UI;
    private float loadingSpeed = 1;
    private float targetValue;
    private AsyncOperation operation;

    private void Awake()
    {
        DontDestroyOnLoad(this);
        Loading_UI = transform.Find("Loading").gameObject;
        loadingSlider = Loading_UI.transform.Find("Slider").GetComponent<Slider>();
        loadingText = Loading_UI.transform.Find("Text").GetComponent<Text>();
    }

    void Start()
    {
        loadingSlider.value = 0.0f;
        StartCoroutine(AsyncLoading());
    }

    IEnumerator AsyncLoading()
    {
        operation = SceneManager.LoadSceneAsync("Scense");
        Loading_UI.SetActive(true);
        operation.allowSceneActivation = false;
        yield return operation;
    }

    void Update()
    {
        targetValue = operation.progress;

        if (operation.progress >= 0.9f)
        {
            //operation.progress的值最大爲0.9
            targetValue = 1.0f;
        }

        if (targetValue != loadingSlider.value)
        {
            //插值運算
            loadingSlider.value = Mathf.Lerp(loadingSlider.value, targetValue, Time.deltaTime * loadingSpeed);
            if (Mathf.Abs(loadingSlider.value - targetValue) < 0.01f)
            {
                loadingSlider.value = targetValue;
            }
        }

        loadingText.text = ((int) (loadingSlider.value * 100)).ToString() + "%";

        if ((int) (loadingSlider.value * 100) == 100)
        {
            Loading_UI.SetActive(false);
            //允許異步加載完畢後自動切換場景
            operation.allowSceneActivation = true;
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章