# 场景管理

Unity中一个场景就是一个小世界,里面可以放置我们的游戏对象、模型、动画、光源、粒子特效等,并可以在里面运行我们的游戏逻辑代码。

在一个项目中,大部分情况下会存在很多个场景文件,所以场景的管理很重要。如果是一个小项目,则只需要一个场景即可。

先看场景的配置,打开菜单 File>>BuildSettings打开构建设置窗口。然后在我们的Assets文件夹下面,我们刚刚创建的两个测试场景把它拖放到Scenes In Build这个列表中。因为只有加入到了这个列表中的Unity场景,才能通过脚本进行场景切换。

using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneSwitch : MonoBehaviour
{

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A)) {
            SceneManager.LoadScene("2_5_B", LoadSceneMode.Single);
        }
        if (Input.GetKeyDown(KeyCode.B)) {
            SceneManager.LoadScene("2_5_B", LoadSceneMode.Additive);
        }
        
    }
}

上面代码实现了两种方式切换场景。

  1. 独占模式:当场景切换后,上一个场景中的游戏对象会被卸载掉,然后加载新的场景
  2. 叠加模式:上一个场景中的游戏对象不会被卸载掉,第二个场景中的对象会叠加到第一个场景上面。

运行结果:

默认场景2_5_A中,有一个圆球,并绑定了SceneSwitch脚本。第二个场景2_5_B中,添加了一个Cube。当我们在场景A下运行游戏,按下按键A,场景会切换到场景B,且切换后场景中只保留了一个方块儿。

重新运行,按下按键B,场景加载后场景中会同时存在小球和一个方块儿。如下图所示:

image-20230702210032578