本文结合unityAPI书写综合,并且但不限于网络相关内容资料整合而成。
AsyncOperation是unity当中的异步操作协同程序其中的变量:
allowSceneActivation:是否(true/false)允许在场景准备就绪后立即跳转场景
isDone:该操作是否已经完成(返回一个true/false)
priority:调整您的异步加载顺序
progress:获取当前操作进度
unity官网API参见:
Unity 脚本 API---AsyncOperationhttps://docs.unity3d.com/cn/2020.2/ScriptReference/AsyncOperation.html那么接下类我们来说说用法
首先你需要知道的
1.上面四个变量的大致作用
2.progress:这里面有这样一个说法“当进度浮点值到达 1.0 并调用 isDone 时,操作结束。如果将 allowSceneActivation 设置为 false,则进度将在 0.9 处停止,直到被设置为 true”
然后我们开始操作,代码如下:
using UnityEngine.SceneManagement;//添加引用的
using UnityEngine.UI;//添加引用的
public Button but;//声明了一个按钮
public GameObject obj;//声明了一个对象
public Slider slider;//声明了一个进度条
public Text text;//显示文字
ok,那么到这里先来说说我要做什么
点击面板中的一个“按钮”,然后会出来一个“进度条”进行加载,在加载的时候会显示一个“text的百分比”,接着就加载到另一个场景中了。
然后我在“Start”函数当中做了个按钮点击
but.onClick.AddListener(() =>
{
obj.SetActive(false);//隐藏按钮面板
this.gameObject.SetActive(true);//显示进度条面板
Loadybjz();//调用异步加载函数
});
接着我在里面只写了
public void Loadbjz()
{
StartCoroutine(Loadlev());//开始协同程序
}
这里请注意不要写在Update之类的函数当中,否则会出问题!!!(想了解具体的可以自行百度)
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;//暂缓一帧,在下一帧接着往下处理
//yield return null(不管你return后面写的数字是多少执行的都一样)
}
}
现在我们的电脑配置通常比较好,所以一般情况下只有在下一个场景地图比较大,需要加载时间才会出现我们写的进度条,通常情况下直接嗖一下就过去了



