zoukankan      html  css  js  c++  java
  • 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");
        }
    
    }
  • 相关阅读:
    使用mybatis报错constructor found in com.atguigu.mybatis.bean.Department matching [java.lang.Integer, java.lang.String]
    mybatis报错 Error instantiating interface com.atguigu.mybatis.dao.DepartmentMapper with invalid types () or values ()
    报错Mapped Statements collection does not contain value for com.atguigu.mybatis.dao.EmployeeMapperPlus
    mybatis学习(2)
    resultType没有指定就会报错
    使用Mybatis时报错Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
    Oracle操作ORA-02289: 序列不存在
    在数据库中添加数据以后,使用Mybatis进行查询结果为空
    program
    codevs4817 江哥的dp题d
  • 原文地址:https://www.cnblogs.com/zhh19981104/p/8673401.html
Copyright © 2011-2022 走看看