游戏进度条滑块
这也是我们经常用到的一个组件,拖动条,我们可以用它来制作进度条,血条,调节音量3D植物,下面就来介绍一下它的核心组件
粘贴图片.png
粘贴图片.png
可以看到我在Split下面添加了2个Sprites和一个Label,分别是前后背景照片unity 加载进度条,另外一个是显示当前进度的Label。 这张图和上图对比一下就知道了。
粘贴图片.png
这是创建的进度条。
异步加载 SceneManager.LoadSceneAsync
当我们需要加载下一个场景时,我们往往会使用异步加载。 异步加载是指在不阻塞主线程的情况下加载场景。 如果我们直接跳转,有时候场景很大,我们需要一段时间才能跳转到下一个场景才加载满,这会导致播放不流畅。
粘贴图片.png
这里的第二行代码是让它加载完成后不显示,然后在我们要显示的时候设置为True。 上图中的next还有一个progress属性,表示当前加载的进度。 我们将在下面使用它。
现在我们很多游戏的进度条都是假的unity 加载进度条,一般都是前端和后端都是假的,只有中间是真的UI界面,(商家这时候可以宣传一些活动,让我们仔细看看)。代码
粘贴图片.png
void StartJDT()
{
//刚开始我的进度条是隐藏的,执行这个方法,让进度条显示出来
JDTPanel.SetActive(true);
//开启协程,让他去执行进度条加载,0.55f是进度条第一次的目标值为55%
StartCoroutine("St", 0.55f);
}
IEnumerator St(float tar)
{
//当进度条没有到达tar点位的时候,他就会进入到下边的循环
while (!IsEnd)
{
JDT.GetComponent().value = Mathf.MoveTowards(JDT.GetComponent().value, tar, Random.Range(0.001f, 0.05f));
if (JDT.GetComponent().value >= tar) { IsEnd = true; }
yield return new WaitForSeconds(Random.Range(0f, 0.2f));
}
}
void Update()
{
if (IsEnd)
{
if (next.progress<0.9f)
{
//当异步场景资源没有加载加载完毕的时候,一般都是当progress为90%的时候就是加载完毕了
JDT.GetComponent().value = 0.55f + next.progress * 0.2f;
}
else
{
//当异步场景资源加载加载完毕的时候,我在开启协程,然后让进度条的目标位置为1
IsEnd = false;
StartCoroutine("St", 1f);
}
}
//当进度条进度为100%的时候,让异步加载进来的场景显示
if (JDT.GetComponent().value == 1)
{
next.allowSceneActivation = true;
}
}
若水GIF截图_2016年12月17日15:46:37.gif
这是他展示的
粘贴图片.png
这是整个过程