# SceneManagerAPI

> Provides a mechanism to override specific SceneManager methods.

## Definition

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

```csharp
public class SceneManagerAPI
```

## Remarks

Derive from this base class to provide alternative implementations to the C# behavior of specific [SceneManager](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanager.md) methods.

**Warning:** The SceneManagerAPI class is intended for advanced usage. Only a single implementation can be active at a time (via [SceneManagerAPI.overrideAPI](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanagerapi/overrideapi.md)), so its usage could conflict with any other code attempting to use the same mechanism.

The example detects when scene loading is done by index, and logs a warning to switch to loading by scene path.

## Examples

```csharp
using UnityEngine;
using Debug = UnityEngine.Debug;
using UnityEngine.SceneManagement;

public class SceneIndexLogger : SceneManagerAPI
{
    [RuntimeInitializeOnLoadMethod]
    static void OnRuntimeMethodLoad()
    {
        SceneManagerAPI.overrideAPI = new SceneIndexLogger();
    }

    protected override int GetNumScenesInBuildSettings()
    {
        Debug.LogWarning("SceneManager.GetNumScenesInBuildSettings() called, please load scenes by path to avoid issues when scenes are reordered.");
        return base.GetNumScenesInBuildSettings();
    }

    protected override Scene GetSceneByBuildIndex(int buildIndex)
    {
        Debug.Log($"SceneManager.GetSceneByBuildIndex(buildIndex = {buildIndex}) called, please load scenes by path to avoid issues when scenes are reordered.");
        return base.GetSceneByBuildIndex(buildIndex);
    }
}
```

## Constructors

| Constructor                                                                                              | Description                                                                                              |
| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| [SceneManagerAPI()](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanagerapi/ctor.md) | Constructor only to be used by deriving classes. Assign to overrideAPI to override SceneManager methods. |

## Static Properties

| Property                                                                                                  | Description                                                                                                                                                                                                                                              |
| --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [overrideAPI](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanagerapi/overrideapi.md) | The specific [SceneManagerAPI](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanagerapi.md) instance to use to handle overridden [SceneManager](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanager.md) methods. |

## Methods

| Method                                                                                                                                        | Description                                                                                                                                                                                                                                                                                           |
| --------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [GetNumScenesInBuildSettings](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanagerapi/getnumscenesinbuildsettings.md)     | Override for customizing the behavior of the [SceneManager.sceneCountInBuildSettings](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanager/scenecountinbuildsettings.md) function.                                                                                                |
| [GetSceneByBuildIndex](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanagerapi/getscenebybuildindex.md)                   | Override for customizing the behavior of the [SceneManager.GetSceneByBuildIndex](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanager/getscenebybuildindex.md) function.                                                                                                          |
| [LoadFirstScene](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanagerapi/loadfirstscene.md)                               | Override for customizing the behavior of loading the first Scene in a stub player build.                                                                                                                                                                                                              |
| [LoadSceneAsyncByNameOrIndex](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanagerapi/loadsceneasyncbynameorindex.md)     | Override for customizing the behavior of the [SceneManager.LoadScene](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanager/loadscene.md) and [SceneManager.LoadSceneAsync](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanager/loadsceneasync.md) functions. |
| [UnloadSceneAsyncByNameOrIndex](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanagerapi/unloadsceneasyncbynameorindex.md) | Override for customizing the behavior of the [SceneManager.UnloadSceneAsync](/engine/6000.3/script-reference/unityengine/scenemanagement/scenemanager/unloadsceneasync.md) function.                                                                                                                  |
