我虽然学了好几年unity,但却从来没真正参与过一款真正的游戏开发,所以对游戏开发中的一些标准不太了解。现在想问下关于场景切换的一些问题。
以前我的了解是,只要3D场景不同就需要切换。比如我现在在做一个3D可视化的BIM系统,首页有一个城市场景,有一个主页菜单。然后有很多很多子模块,比如停车场,办公室,机电房等等,每个子模块也有相应的UI界面。我需要频繁的通过UI界面和3D交互在这些子模块和城市场景切换。
理论上应该把这些子模块都做成一个个场景来回切换,这样有好处也有坏处。好处是每个子模块独立一个场景,烘焙灯光场景调后期效果可以很方便,因为都是独立的嘛。但是也有坏处,首先就是切换场景时城市场景写的代码资源会全部清理,虽然可以用单例,DontDestroyOnLoad来解决,但是每切换一次都需要初始化一次当前模块,频繁的切换就需要频繁的初始化,事实上初始化逻辑代码都是相同的,感觉完全重复了。其次就是切换场景时会有片刻的卡顿,这貌似是避免不了的,频繁的切换就会频繁的卡顿,这体验明显就很差。
然后我现在采用了第二种方法,就是把这些子模块和城市场景都放在一个场景中。这样也有好处和坏处。好处首先就是代码资源不用频繁的初始化,因为都在一个场景中,初始化一次就够了。其次就是不会有切换场景时的卡顿。坏处也显而易见,需要手动的关闭模块,开启模块。比如我需要从城市场景切换到停车场,我就只能手动的先关闭除停车场之外的所有场景模块,然后把停车场启用,还需要切换相机的视角,Post文件,相机的一些参数等等。这样写起来真的也很麻烦。
写的有点多,我已经尽量把自己的想法表达出来了,希望大佬能看懂。所以现在很疑惑真正游戏开发时的多场景切换是怎么处理的,有没有游戏开发大佬来解一下惑,感谢~
同学你好,第一个问题卡顿的话可以用异步加载优化,如果异步加载还卡顿,可以参考:
http://blog.silucg.com/manew/article-6300.html
第二个可以设计好框架来整理好运行逻辑就可以了,功能复杂的话一定的工作量是离不开的
关于场景该不该分开处理与批量加载异步场景可以参考一下:
https://www.jianshu.com/p/c5564fb86a3b
另外可以研究一下场景加载与卸载的API,直接看官方的API文档,找场景管理类,几个场景是可以加载卸载与叠加的