加载loading面板
/// <summary>
/// 加载场景的方法
/// </summary>
/// <param name="name"></param>
public static void LoadingSceneByName(string name)
{
//需要加载LoadingPanel这个脚本
//创建挂在这个脚本的预设物体
//首先加载物
GameObject LoadingPanelPrefab = Resources.Load<GameObject>("Prefabs/LoadingPanel");
//克隆,将物体加载到场景中
GameObject LoadingPanelGb = GameObject.Instantiate(LoadingPanelPrefab);
//设置父物体
LoadingPanelGb.transform.parent = GameObject.Find("UI Root").transform;
//设置缩放
LoadingPanelGb.transform.localScale = Vector3.one;
LoadingPanelGb.transform.localPosition = Vector3.zero;
//找脚本执行方法
LoadingPanelGb.GetComponent<LoadingPanel>().StartLoadingScene(name);
}
挂栽在面板上的Loading脚本
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class LoadingPanel : MonoBehaviour {
/// <summary>
/// 加载的进度
/// </summary>
public UISlider loadingProgressSlider;
/// <summary>
/// 提示框
/// </summary>
public UILabel tipsLabel;
public float targetProgress;
public float currentProgress;
// Use this for initialization
void Start() {
}
// Update is called once per frame
void Update() {
}
/// <summary>
/// 设置界面的进度显示
/// </summary>
/// <param name="progress"></param>
public void SetProgress(float progress)
{
loadingProgressSlider.value = Mathf.Clamp(progress,0,1) ;
}
/// <summary>
/// 启动加载场景的协程
/// </summary>
/// <param name="name"></param>
public void StartLoadingScene(string name)
{
StartCoroutine(LoadingSceneByNameAsync(name));
}
/// <summary>
/// 加载场景的协程
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public IEnumerator LoadingSceneByNameAsync(string name)
{
currentProgress = targetProgress = 0;
//协程加载
AsyncOperation operation = SceneManager.LoadSceneAsync(name);
//让场景不自动跳转
operation.allowSceneActivation = false;
while (currentProgress < 0.9f)
{
targetProgress = operation.progress;
while (currentProgress<targetProgress)
{
currentProgress += 0.05f;
SetProgress(currentProgress);
yield return null;//停一帧
}
}
//把剩下的也过度一下
targetProgress = 1;
while (currentProgress<targetProgress)
{
currentProgress += 0.01f;
SetProgress(currentProgress);
yield return null;//停一帧
}
operation.allowSceneActivation = true;
}
}