# Scene

> The runtime data structure for a scene.

## Definition

* **Type:** Struct
* **Namespace:** [UnityEngine.SceneManagement](/engine/6000.3/script-reference/unityengine/scenemanagement.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public struct Scene
```

## Remarks

This object can be used to query information about a scene, and as an input to various scene manipulation functions in [SceneManager](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanager.md) and [EditorSceneManager](/engine/6000.3/script-reference/unityeditor/scenemanagement/editorscenemanager.md). To query the [PhysicsScene](/engine/6000.3/script-reference/unityengine/physicsscene.md) that is assigned to the scene, use the [PhysicsSceneExtensions.GetPhysicsScene](/engine/6000.3/script-reference/unityengine/physicssceneextensions/getphysicsscene.md) method.

The following script prints some information about the currently loaded scene, creates and switches to a new scene, then prints the same information for the new scene. To use the script, attach it to a GameObject and run the project.

```csharp
using UnityEngine;
using UnityEngine.SceneManagement;

public class SwitchSceneAndQueryInfo : MonoBehaviour
{
    public static void QuerySceneInfo(Scene scene)
    {
        Debug.Log("Scene name: " + scene.name);
        Debug.Log("Scene path: " + scene.path);
        Debug.Log("Scene build index: " + scene.buildIndex);
        Debug.Log("Scene is dirty: " + scene.isDirty);
        Debug.Log("Scene is loaded: " + scene.isLoaded);
        Debug.Log("Scene root count: " + scene.rootCount);
    }

    public void Start()
    {
        // Query information about the currently active scene
        Scene currentScene = SceneManager.GetActiveScene();
        QuerySceneInfo(currentScene);

        // Create a new scene and switch to it
        var newScene = SceneManager.CreateScene("MyNewScene");
        SceneManager.SetActiveScene(newScene);
        SceneManager.UnloadSceneAsync(currentScene);

        // Query information about the new scene
        QuerySceneInfo(newScene);
    }
}
```

Additional Resources: [SceneAsset](/engine/6000.3/script-reference/unityeditor/sceneasset.md).

## Properties

| Property                                                                                      | Description                                                                           |
| --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| [buildIndex](/engine/6000.3/script-reference/unityengine/scenemanagement/scene/buildindex.md) | Return the index of the Scene in the Build Settings.                                  |
| [handle](/engine/6000.3/script-reference/unityengine/scenemanagement/scene/handle.md)         | A unique identifier for a loaded scene.                                               |
| [isDirty](/engine/6000.3/script-reference/unityengine/scenemanagement/scene/isdirty.md)       | Returns true if the Scene is modified.                                                |
| [isLoaded](/engine/6000.3/script-reference/unityengine/scenemanagement/scene/isloaded.md)     | IsLoaded is set to true after loading has completed and objects have been enabled.    |
| [isSubScene](/engine/6000.3/script-reference/unityengine/scenemanagement/scene/issubscene.md) | Whether this scene is a subscene.                                                     |
| [name](/engine/6000.3/script-reference/unityengine/scenemanagement/scene/name.md)             | Returns the name of the Scene that is currently active in the game or app.            |
| [path](/engine/6000.3/script-reference/unityengine/scenemanagement/scene/path.md)             | Returns the relative path of the Scene. For example: "Assets/MyScenes/MyScene.unity". |
| [rootCount](/engine/6000.3/script-reference/unityengine/scenemanagement/scene/rootcount.md)   | The number of root transforms of this Scene.                                          |

## Methods

| Method                                                                                                        | Description                                                                                                                                                                                                              |
| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [GetRootGameObjects](/engine/6000.3/script-reference/unityengine/scenemanagement/scene/getrootgameobjects.md) | Returns all the root game objects in the Scene.                                                                                                                                                                          |
| [IsValid](/engine/6000.3/script-reference/unityengine/scenemanagement/scene/isvalid.md)                       | Whether this is a valid Scene. A Scene may be invalid if, for example, you tried to open a Scene that does not exist. In this case, the Scene returned from EditorSceneManager.OpenScene would return False for IsValid. |

## Operators

| Operator                                                                                          | Description                               |
| ------------------------------------------------------------------------------------------------- | ----------------------------------------- |
| [operator ==](/engine/6000.3/script-reference/unityengine/scenemanagement/scene/op-equality.md)   | Returns true if the Scenes are equal.     |
| [operator !=](/engine/6000.3/script-reference/unityengine/scenemanagement/scene/op-inequality.md) | Returns true if the Scenes are different. |
