unity场景异步加载进度条

加载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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值