/*
*FileName: LoadSceneManager.cs
*Author: MinTao
*Date: 2022/03/15 17:22:44
*UnityVersion: 2020.3.0f1c1
*Description: 异步加载场景
*/
using System.Collections;
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class LoadSceneManager : MonoBehaviour
{
/// <summary>
/// 要加载场景的名称
/// </summary>
public string SceneName;
/// <summary>
/// 加载进度显示界面
/// </summary>
public GameObject LoadingPanel;
/// <summary>
/// 加载进度条
/// </summary>
public Slider LoadSlider;
/// <summary>
/// 加载进度文字
/// </summary>
public TextMeshProUGUI LoadProcessText;
/// <summary>
/// 进度条速度
/// </summary>
private float loadSpeed = 1;
/// <summary>
/// 进度条最终进度值
/// </summary>
private float loadTargetValue = 0;
void Start()
{
LoadSlider.value = 0;
transform.GetComponent<Button>().onClick.AddListener(delegate { StartCoroutine(LoadScene(SceneName)); });
}
IEnumerator LoadScene(string sceneName)
{
LoadingPanel.SetActive(true);
AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName);
operation.allowSceneActivation = false;
while (!operation.isDone)
{
loadTargetValue = operation.progress;
if (operation.progress >= 0.9f)
{
loadTargetValue = 1;
}
if (!loadTargetValue.Equals(LoadSlider.value))
{
LoadSlider.value = Mathf.Lerp(LoadSlider.value, loadTargetValue,
Time.deltaTime * loadSpeed); //插值,让进度条流畅
if (Mathf.Abs(LoadSlider.value - loadTargetValue) < 0.01f)
{
LoadSlider.value = loadTargetValue;
}
}
LoadProcessText.text =
(int) (LoadSlider.value * 100) + "%";
if ((int) (LoadSlider.value * 100) == 100)
{
operation.allowSceneActivation = true; //允许异步加载完毕后自动切换场景
}
yield return null;
}
}
}
Unity异步加载场景,进度显示
于 2022-03-15 17:43:24 首次发布