• NGUI的异步场景加载进度条


    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");
        }
    
    }
  • 相关阅读:
    面向对象中一些容易混淆的概念
    day12作业
    day10作业
    day09作业
    Where与Having的区别
    排序算法之快速排序
    排序算法之冒泡排序
    jQuery中的100个技巧
    用node.js给图片加水印
    代码高亮美化插件-----SyntaxHighlighter
  • 原文地址:https://www.cnblogs.com/zhh19981104/p/8673401.html
Copyright © 2020-2023  润新知