【Unity】优化场景加载的小方案

693 阅读2分钟

在Unity中加载场景是每个项目必不可少的,即便是单个场景中小游戏,初始时也需要先加载场景,但如果是比较大的场景,三角面、顶点数非常多的场景、加载的时间会非常久,这时候玩家都在心里骂骂咧咧了。

Unity提供的加载方式有直接加载SceneManager.LoadScene()和异步加载LoadSceneAsync()两种方式。经过不严谨的测试发现,异步加载居然比直接使用SceneManager.LoadScene()加载要慢一些。

加载方式加载速度
LoadScene()
LoadSceneAsync()

如果不考虑加载过程的需要实现过渡动画、逻辑操作等,直接使用LoadScene()比使用LoadSceneAsync()可能要好。但实际运用更多使用异步加载的方式,据说这种加载方式更加高效灵活。

顺便提一下除了这2种最常用的加载方式还有LoadSceneAdditive();这是将其它场景添加到当前场景中的方式,这里不对它进行研究,如果感兴趣可以自己查阅一下资料。

但除了这样的加载方式外还有一个技巧,就是将场景中的大量物体禁用,等待场景加载完成后再通过代码逐渐激活这些物体。在不严谨的测试下测试结果如下(使用的模型三角面数达到百万级别、甚至有千万级别的)。

加载方式加载耗时
LoadScene()47s
LoadScene() 禁用大量物体14s
LoadSceneAsync()72s
LoadSceneAsync() 禁用大量物体16s

以上测试结果不一定准确,但总体上得出的结论是禁用游戏物体确实能大大加快场景的加载速度。也推荐使用最后一种加载方式,因为大家都推荐异步加载,总是有一定的道理的。自己额外写一个控制物体激活状态的脚本,这个并不复杂。

如果这篇文章对你有所收获,麻烦点个赞吧,这不会给我带来任何收益,但也会激励我继续创作,非常感谢!