• SceneManager 场景管理
    • 静态事件

    SceneManager 场景管理

    1. using UnityEngine.SceneManagement;

    描述:运行时的场景管理方法。

    静态变量说明
    sceneCount场景的总数。
    sceneCountInBuildSettings在BuildSettings中的场景数量。
    静态函数说明
    CreateScene创建一个空的新场景并指定名称。名称不能为空或者与已存在的场景名称一样。
    GetActiveScene获取激活的场景。
    GetSceneAt获取在场景管理列表添加场景的索引。索引必须大于或等于0并且小于SceneManager.sceneCount。
    GetSceneByName通过场景添加到场景管理器的指定名称查找该场景。该名称不会有.unity扩展名。在BuildSettings窗口中显示返回匹配到的首个场景的名称,该名称可以是名称的最后部分。在Build Settings中显示的名称也可以是路径,依然没有扩展名,在这种情况下将会仅返回精确匹配。这是不区分大小写的。
    GetSceneByPath查找所有给定资源路径并添加到SceneManager中的场景。场景路径。相对于工程文件夹下。就像: “Assets/MyScenes/MyScene.unity”。
    LoadScene通过在Build Settings中它们的名称或索引加载场景。指定场景名称可以是路径的最后部分不加.unity扩展名或者全部路径不加.unity扩展名。该路径在 Build Settings窗口中被精确的显示出来。如果场景名是指定的将会加载匹配到的首个场景。如果有多个名称相同但是路径不同的场景,你应该使用全部路径。注意那是不区分大小写的。
    LoadSceneAsync在背景中异步加载场景。指定场景名称可以是路径的最后部分不加.unity扩展名或者全部路径不加.unity扩展名。该路径在 Build Settings窗口中被精确的显示出来。如果场景名是指定的将会加载匹配到的首个场景。如果有多个名称相同但是路径不同的场景,你应该使用全部路径。注意这不区分大小写。
    MergeScenes该属性将场景资源合并到destinationScene。该函数合并场景资源内容到目的场景并删除原场景资源。所有根资源场景下的物体移动到根目的场景目录下。注意:该函数是有破坏性的:当资源合并完成后原有资源场景将会被立刻销毁。
    MoveGameObjectToScene移动一个物体从它当前场景到一个新的场景中。它必须要求该物体在当前场景的根目录下。
    SetActiveScene设置被激活的场景。
    UnloadScene卸载所有和指定场景关联的物体。指定场景名称可以是路径的最后部分不加.unity扩展名或者全部路径不加.unity扩展名。该路径在 Build Settings窗口中被精确的显示出来。如果场景名是指定的将会加载匹配到的首个场景。如果有多个名称相同但是路径不同的场景,你应该使用全部路径。注意该方法不区分大小写。注意该资源当前不被卸载,为了释放资源内存调用Resources.UnloadAllUnusedAssets。

    静态事件

    1. // Static Events
    2. //
    3. public static event UnityAction<Scene, Scene> activeSceneChanged {
    4. add;
    5. remove;
    6. }
    7. public static event UnityAction<Scene, LoadSceneMode> sceneLoaded {
    8. add;
    9. remove;
    10. }
    11. public static event UnityAction<Scene> sceneUnloaded {
    12. add;
    13. remove;
    14. }

      示例:

    1. void Start()
    2. {
    3. SceneManager.activeSceneChanged += OnSceneChanged;
    4. }
    5. private void OnSceneChanged(Scene scene1, Scene newScene)
    6. {
    7. ...
    8. }
    9. void OnDestroy()
    10. {
    11. SceneManager.activeSceneChanged -= OnSceneChanged;
    12. }

    ?