兩個場景 一個當前場景 一個爲要加載的下一個場景
在第一個場景中做了一個加載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;
}
}
}