zoukankan      html  css  js  c++  java
  • Unity3D编程学习 小知识_异步加载_2018Oct

    一 .  顺序表  (list<type>)

         特点:

          1. 方便查找 遍历 修改

           2. 内存地址连续的

            3. 不适用插入 删除 频繁的场景   (每插入/删除一个值,都会改变后面所有值的索引)

         常用方法:

             1. bool remove(value) -->       按照指定元素之删除 bool代表是否删除

             2. int indexof(value) -->          返回值为-1 代表没有查到该元素

             3. void insert(index, value) -->   在index下标位置插入value

             4. void Reverse() --> 翻转        A , B,...X  -->>>>  X.... B ,A

    二. list<T> 和动态数组ArrayList[]的区别

         list             使用时必须先规定统一的元素类型;

          ArrayList   使用的时候会出现装箱和拆箱的转换 所以我们一般尽量避免使用 

    三.切换场景时  同步加载和异步加载
    1. 同步 直接切换场景 (若机器配置low或场景大 就会卡)
    2. 异步 先直接切换一个中间场景(过度场景 (显示进度条)) --> 到新场景
    3. 在异步中的两个while循环没有什么大作用, 目的就是优化进度条的!!!

          ---异步加载代码---

    //UI进度条以
        private Slider _proSlider;
    //目的是对场景进行控制 获取进度值 和允许显示
        private AsyncOperation _async;
    //UI应该达到的进度
        private int _currProgress;
        //1. 获取滑动条
        //协同加载(异步加载 不断获取进度值 经过计算赋值给滑动条)
        // Use this for initialization
        void Start ()
        {
            _currProgress = 0;
            _async = null;
            _proSlider = GameObject.Find("Slider").GetComponent<Slider>();
            StartCoroutine("LoadScene");
        }
        
        // Update is called once per frame
        void Update ()
        {
            //目的就是现实进度
            _proSlider.value = _currProgress / 100.0f;
        }
        IEnumerator LoadScene()
        {
    //临时的进度
            int tmp;
            //异步加载
            _async = SceneManager.LoadSceneAsync("S3");
            //先不显示场景 等到进度为100%的时候显示场景 必须的!!!!
            _async.allowSceneActivation = false;
            #region 优化进度的 
            while (_async.progress < 0.9f)
            {
                //相当于滑动条应该到的位置
                tmp = (int) _async.progress * 100;
                
                //当滑动条 < tmp 就意味着滑动条应该变化
                while (_currProgress < tmp)
                {
                    ++_currProgress;
                    yield return  new WaitForEndOfFrame();
                }
            }//while end   进度为90%
    
            tmp = 100;
            while (_currProgress < tmp)
            {
                ++_currProgress;
                yield return  new WaitForEndOfFrame();
            }       
            #endregion
            //处理进度为0 ~0.9的0
            
            //进度条完成 允许显示
            _async.allowSceneActivation = true;
            //SceneManager.loa
        }
  • 相关阅读:
    golang语法要点笔记
    环境配置
    实现chrome多用户独立cookie
    Golang遇到的问题记录
    php preg_replace去除html xml 注释
    C 基础
    多种写法
    mysql 查看当前数据库
    sql group by
    sql CONCAT()
  • 原文地址:https://www.cnblogs.com/RainPaint/p/9832624.html
Copyright © 2011-2022 走看看