Unity-场景异步切换
场景同步切换
SceneManger.LoadScene()
1 | SceneManger.LoadScene("TestScene"); |
场景同步切换的缺点:
- 因为先删除当前场景中所有对象,且去加载新场景的相关信息,会很耗时,造成卡顿
场景异步切换
SceneManger.LoadSceneAsync()
和资源异步加载几乎一致,有两种方法
通过事件回调函数 异步加载
1 | AsyncOperation ao = SceneManger.LoadSceneAsync("TestScene"); |
通过协程 异步加载
- 需要注意的是 加载场景会把当前场景上没有特别处理的对象都删除了,所以协程中的部分逻辑执行不了
- 解决思路:
让处理场景加载的脚本依附的对象 过场景时不被移除
1 | DontDestroyOnLoad(this.gameObject); |
使用协程的好处
- 可以在异步加载场景的同时做一些别的逻辑,比如更新进度条
方法一
1 | //利用 场景异步加载的进度去更新 不是特别准确 |
方法二
根据游戏规则自定义进度条变化的条件,例如:
- 场景加载结束 更新20%进度
- 动态加载怪物 再更新20%进度
- 动态加载场景模型 认为加载结束 进度条顶满
- 隐藏进度条
总结
事件回调函数
- 优点:写法简单,逻辑清晰
- 缺点:只能加载完场景做一些事情 不能再加载过程中处理逻辑
协程异步加载
- 优点:可以在加载过程中处理逻辑,比如进度条更新等
- 缺点:写法较为麻烦,要通过协程
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Escapeey`Blog!
评论