StartCoroutine(Loadlev());//开始协同程序
IEnumerator Loadlev()//协程
{
AsyncOperation operation = SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex+1);//携程函数=加载下一个场景的编号
operation.allowSceneActivation = false;//进度条加载完后不进行操作
while (!operation.isDone)//如果没有完成
{
slider.value = operation.progress;//将 operation(当前进度)给滑动条赋值
text.text = operation.progress*100+"%";//显示百分比
if (operation.progress>=0.9f)//如果当加载进度大于等于0.9时执行
{
slider.value = 1;//进度条满
text.text = "100%";//文本百分比为100
operation.allowSceneActivation = true;//将进度条修改为加载完后进行跳转
}
yield return null;//暂缓一帧,在下一帧接着往下处理:注1、注2
//yield return null(不管你return后面写的数字是多少执行的都一样)
}
}
异步加载需要先介 AsyncOperation 类
SceneManager.LoadSceneAsync(1, LoadSceneMode.Additive) 这个是异步加载的函数,其参数的用法跟同步加载的用法一致,然后,返回值 是一个 As yncOperation 类。
AsyncOperation 的用处:
- AsyncOperation.isDone 这个是用来判断加载是否完成。这个属性是加载完并且跳转成功后才会变成完成
- AsyncOperation.allowSceneActivation 这个是加载完后,是否允许跳转,当为false时,即使场景加载完了,也不会跳转
- AsyncOperation.progress 这个时表示加载场景的进度。实际上的值时 0 - 0.9, 当值为0.9的时候,场景就已经加载完成了。
我们要异步加载场景的话,一般都是需要用协程一起工作。