欢迎加入Unity业内qq交流群:956187480


可以设置是否需要进度条

进度条的值可以读取实际数值(asyn.progress)也可自定义

加载进度的形式可以自定义

public class ScenesManager : BaseManager<ScenesManager> {

private Slider uislider;
//进度条value
private int barProgress;
public delegate void DelAfterLoadScene();
public DelAfterLoadScene theDel;
public string willShowSceneName;
//异步对象
AsyncOperation asyn;
public void LoadNextScene(string sceneName, DelAfterLoadScene del, bool isLoading = false)
{
willShowSceneName = sceneName;
theDel = del;
if (isLoading)
{
UIManager.GetInstance.ShowUI(EUiId.LoadingView);
barProgress = 0;
if (uislider == null)
{
uislider = GameObject.Find("ProgressBar").gameObject.GetComponent<Slider>();
}
//开启一个异步任务
StartCoroutine(LoadScene(sceneName));
}
else
{
SceneManager.LoadScene(sceneName);

GameTool.ClearMemory();
}

}
IEnumerator LoadScene(string sceneName)
{
asyn = SceneManager.LoadSceneAsync(sceneName);
asyn.allowSceneActivation = false;
yield return asyn;
}

protected override void Update()
{
if (asyn == null)
{
return;
}
int theProgress = 0;

//asyn.progress的范围是0~1(最大检测范围到0.9,所以在0.9的时候就可以显示场景了)
if (asyn.progress < 0.9f)
{
//正在加载场景中ing
theProgress = (int)asyn.progress * 100;
}
else
{
theProgress = 100;
}

if (barProgress < theProgress)
{
barProgress++;
}

uislider.value = barProgress / 100f;

if (barProgress == 100)
{
asyn.allowSceneActivation = true;
}
if (asyn.isDone)
{
if (theDel != null) theDel();
asyn = null;
}
}
}

欢迎加入Unity业内qq交流群:956187480