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 }