Unity3D完全自学教程(第8章 场景管理)

1,688 阅读2分钟

本章将要介绍多场景编辑、运行时的场景管理、SceneManager类。

多场景管理

多场景管理的好处

  1. 通过拆分场景可以让多人同时编辑一个场景
  2. 通过合并场景可以创建巨大的无缝衔接的地图

打开多个场景

  1. 点击场景,右键>Open Scene Additive
  2. 直接将场景拖入层级窗口

场景分隔栏菜单

每个场景右上角都有一个场景分隔栏菜单

属性介绍:

  1. 设置为激活场景:即当前编辑的场景,如创建一个游戏物体后,该游戏物体属于的场景
  2. 单独保存该场景
  3. 将该场景另存为另一个场景
  4. 保存所有场景
  5. 卸载场景:场景不在游戏窗口中显示
  6. 移除场景:不仅不再游戏窗口中显示,还移除出层级窗口
  7. 在工程窗口选中这个场景对应的文件
  8. 新建游戏物体

多场景烘培光照贴图

打开所有需要烘培的场景,在菜单栏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