1、直接创建三个场景,其中第二个场景是用来显示进度条加载的界面,进度条用UISlider
2、这里提供两种方法,建议使用第一种,加载比较平缓
方法一:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class LoadingPags : MonoBehaviour
{
public UISlider progressBar; //进度条的引用
private string ScenceName="C"; //加载场景的名字
private float dtimer = 0;
private float target = 0;
AsyncOperation op = null;
private void Start()
{
Debug.Log("进入异步");
//op = SceneManager.LoadSceneAsync(ScenceName); //进入loadScene方法
//op.allowSceneActivation = false;
progressBar.value = 0; //弃用前将其进行初始化了
StartCoroutine(ProcessLoading());
}
private void Update()
{
dtimer += Time.deltaTime;
progressBar.value = Mathf.Lerp(progressBar.value, target, dtimer * 0.2f);
//乘以的数值用来控制加载的速度,当新场景比较小的时候可以使用较小的值,有一定的效果,当场景加载较大的时候就不建议这么使用了
if(progressBar.value>=0.99f)
{
progressBar.value = 1; //使其的值达到完整
op.allowSceneActivation = true; //为true 的时候才可以进行加载新的场景
}
}
IEnumerator ProcessLoading()
{
op = SceneManager.LoadSceneAsync(ScenceName); //进入loadScene方法
op.allowSceneActivation = false;
while (true) //死循环,使其在场景没有加载完成时就不退出了
{
target = op.progress;
if(target>=0.9f) //当场景加载了90%了
{
target = 1;
yield break;
}
yield return 0;
}
}
}
第二种:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Loadign : MonoBehaviour {
public UISlider uislider;
private AsyncOperation asyn=null;
public static string LoadingName; //声明一个静态的字符串变量俩保存要加载的场景名称
void Start ()
{
if(uislider)
{
//进度条丢失了
}
StartCoroutine(Loading());
}
// Update is called once per frame
void Update ()
{
uislider.value = asyn.progress;
//Debug.Log(uislider.value);
//if (uislider.value>=0.8)
//{
// uislider.value = 1;
// asyn.allowSceneActivation = true;
//}
}
IEnumerator Loading()
{
asyn = SceneManager.LoadSceneAsync(2); //加载第三个尝尽
asyn.allowSceneActivation = false;
//uislider.value = asyn.progress; //赋值
yield return asyn;
}
//封装好的静态函数
public static void LoadNewScene(string value)
{
LoadingName = value;
SceneManager.LoadScene("Loadign");
}
}