using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class AsyncLoadScene : MonoBehaviour {
public static AsyncLoadScene _instance;
bool isLoading = false;
public Slider loadingSlider;//加载进度条
public Text loadingText;//显示加载数值
private float targetValue;
private float loadingSpeed = 1;
private AsyncOperation operation;
public string LoadSceneName = "";//加载场景的名称
private void Awake()
{
_instance = this;
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
AsyncLoadScene();
}
public void LoadScene() {
StartCoroutine(AsyncLoading(LoadSceneName));
}
public IEnumerator AsyncLoading(string scene)
{
if (!isLoading) {
isLoading = true;
operation = SceneManager.LoadSceneAsync(scene);
//阻止当加载完成自动切换
operation.allowSceneActivation = false;
yield return operation;
}
}
public void AsyncLoadScene() {
if (isLoading) {
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)
{
//允许异步加载完毕后自动切换场景
operation.allowSceneActivation = true;
isLoading = false;
}
}
}
}
Unity 异步加载场景并显示加载进度
最新推荐文章于 2024-07-04 23:22:27 发布