本章将要介绍多场景编辑、运行时的场景管理、SceneManager类。
多场景管理
多场景管理的好处
- 通过拆分场景可以让多人同时编辑一个场景
- 通过合并场景可以创建巨大的无缝衔接的地图
打开多个场景
- 点击场景,右键>Open Scene Additive
- 直接将场景拖入层级窗口
场景分隔栏菜单
每个场景右上角都有一个场景分隔栏菜单
属性介绍:
- 设置为激活场景:即当前编辑的场景,如创建一个游戏物体后,该游戏物体属于的场景
- 单独保存该场景
- 将该场景另存为另一个场景
- 保存所有场景
- 卸载场景:场景不在游戏窗口中显示
- 移除场景:不仅不再游戏窗口中显示,还移除出层级窗口
- 在工程窗口选中这个场景对应的文件
- 新建游戏物体
多场景烘培光照贴图
打开所有需要烘培的场景,在菜单栏Lighting窗口中关闭Auto选项,单击Generate Lighting按钮即可
多场景烘培寻路网格
打开所有需要烘培的场景,在寻路窗口单击Bake即可,所有场景公用一份寻路数据,该数据和当前激活的场景保存在一起,烘培结束后切记保存好所有场景
多场景烘培遮挡剔除信息
打开所有需要操作的场景,在Occlusion Culling窗口中单击Bake按钮即可
运行时的场景管理
场景管理类SceneManager
切换场景
该类虽然方法很多,常用的就一个场景切换LoadScene
SceneManager.LoadScene(场景名称);
SceneManager.LoadScene(场景序号);
前提:在File>Build Setting,用拖拽的方式将场景拖到场景列表窗口,会分配序号
获取当前场景编号与名称
//获取编号
int index = SceneManager.GetActiveScene().buildIndex;
//获取名称
string name = SceneManager.GetActiveScene().name;
切换场景时不销毁游戏物体
在物体身上的脚本写入以下代码:
DontDestroyOnLoad(gameObject)
异步加载场景
SceneManager.LoadScene()
方法是同步的,游戏会一直等待函数执行完毕,如果要加载的场景比较大,加载时间就很长
SceneManager.LoadSceneAsync()
是异步的,还可以显示加载进度,用户可以设计一个读取进度的页面
详见书本P266