Unity基础(十四)场景异步加载
1、为什么用异步SceneManager.LoadScene(Scene2);场景的同步切换同步切换场景时unity会删除当前场景上所有对象并且去加载下一个场景的相关信息如果当前场景 对象过多或者下一个场景对象过多这个过程会非常的耗时 会让玩家感受到卡顿异步切换解决这个问题2 场景异步加载当场景异步加载结束后就会自动调用该事件函数 我们如果希望在结束后 做一些事情 那么可以在该函数中写逻辑AsyncOperation aoSceneManager.LoadSceneAsync(Scene2); ao.completed (a) { print(123); }; ao.completed LoadOver; private void LoadOver(AsyncOperation ao) { print(LoadOver); }2 协程异步加载加载场景会把当前场景上 没有特别处理的对象 都删除了所以协程中的部分逻辑是可能执行不了的解决思路让处理场景加载的脚本依附的对象 过场景时 不被移除StartCoroutine(LoadScene(Scene2)); DontDestroyOnLoad(this.gameObject); IEnumerator LoadScene(string name) { //第一步 异步加载场景 AsyncOperation ao SceneManager.LoadSceneAsync(name); print(over); //协程好处 加载的同时 可以处理别的逻辑 yield return ao; //unity内部的 协程协调器 发现异步加载类型的返回对象 那么就会等待 //等待异步加载结束后 才会继续执行 迭代器函数中后面的步骤 //第二步 print(还有); //我们可以在异步加载过程中 去更新进度条 //第一种 是利用场景异步加载 的进度 去更新 但是不是特别准确一般也不会用 //进度控制不了 while (!ao.isDone) { print(ao.progress); yield return null; } //第二种 是根据游戏的规则 自己定义进度变化的条件 //场景加载结束 更新20%进度条 //接着去加载场景中的其他信息 //比如 动态加载怪物 //这时 进度条再更新20% //动态加载 场景模型 //这时候 认为加载结束了 进度条拉满 //隐藏进度条 }