using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class LoadScene : MonoBehaviour
{
private AsyncOperation async;
public Slider slider;
public Text text;
public Text CurLevel;
void Start()
{
CurLevel.text = PlayerPrefs.GetInt("CurLevel", 1).ToString();
StartCoroutine("Load");
}
IEnumerator Load()
{
//异步加载场景
async = SceneManager.LoadSceneAsync("GameScene");
//不允许自动加载场景
async.allowSceneActivation = false;
while (!async.isDone && async.progress < 0.8f)
{
yield return async;
}
}
void Update()
{
if (async.progress < 0.8f)
{
slider.value = async.progress;
}
else
{
slider.value = 1;
async.allowSceneActivation = true;
}
text.text = (slider.value * 100).ToString("0") + "%";
}
}
async.progress值达到0.8时就已经记载完成了。
另一种异步加载方式:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class Loading : MonoBehaviour {
public string SceneName;
private Text txt_progress;
private AsyncOperation ao;
private bool isLoad = false;
void Awake()
{
txt_progress = GetComponent<Text>();
gameObject.SetActive(true);
StartCoroutine("Load");
}
IEnumerator Load()
{
int displayProgress = -1;
int toProgress = 100;
while(displayProgress < toProgress)
{
++displayProgress;
ShowProgress(displayProgress);
if (!isLoad)
{
ao = SceneManager.LoadSceneAsync(SceneName);
ao.allowSceneActivation = false;
isLoad = true;
}
yield return new WaitForEndOfFrame();
}
ao.allowSceneActivation = true;
StopCoroutine("Load");
}
void ShowProgress(int progress)
{
txt_progress.text = progress + "%";
}
}