# allowSceneActivation

> Allows a scene to be activated as soon as it's ready.

## Definition

* **Type:** Property
* **Namespace:** [UnityEngine](/engine/6000.7/script-reference/unityengine.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public bool allowSceneActivation { get; set; }
```

### Remarks

You can use this with [SceneManager.LoadSceneAsync](/engine/6000.7/script-reference/unityengine/scenemanagement/scenemanager/loadsceneasync.md) to delay the activation of the scene and the unloading of the previous one.

When `allowSceneActivation` is false, Unity stops [AsyncOperation.progress](/engine/6000.7/script-reference/unityengine/asyncoperation/progress.md) at 0.9, and [AsyncOperation.isDone](/engine/6000.7/script-reference/unityengine/asyncoperation/isdone.md) remains false. When [AsyncOperation.allowSceneActivation](/engine/6000.7/script-reference/unityengine/asyncoperation/allowsceneactivation.md) is true, [AsyncOperation.isDone](/engine/6000.7/script-reference/unityengine/asyncoperation/isdone.md) can complete. While [AsyncOperation.isDone](/engine/6000.7/script-reference/unityengine/asyncoperation/isdone.md) is false, the [AsyncOperation](/engine/6000.7/script-reference/unityengine/asyncoperation.md) queue is stalled. For example, if one [AsyncOperation.allowSceneActivation](/engine/6000.7/script-reference/unityengine/asyncoperation/allowsceneactivation.md) is set to false, and another [AsyncOperation](/engine/6000.7/script-reference/unityengine/asyncoperation.md) (for example, [SceneManager.UnloadSceneAsync](/engine/6000.7/script-reference/unityengine/scenemanagement/scenemanager/unloadsceneasync.md)) initializes, Unity doesn't call the second operation until the first [AsyncOperation.allowSceneActivation](/engine/6000.7/script-reference/unityengine/asyncoperation/allowsceneactivation.md) becomes true.

It's recommended to set and use [AsyncOperation.allowSceneActivation](/engine/6000.7/script-reference/unityengine/asyncoperation/allowsceneactivation.md) in coroutines, although you can do so from any context where you can hold a valid reference to the operation until it completes. Don't attempt to do so from a lifecycle callback like [MonoBehaviour.Awake()](/engine/6000.7/script-reference/unityengine/monobehaviour/awake.md), which only runs once, synchronously, on object initialization.

### Examples

```csharp
//This script lets you load a Scene asynchronously. It uses an asyncOperation to calculate the progress and outputs the current progress to Text (could also be used to make progress bars).

//Attach this script to a GameObject
//Create a Button (<b>Create</b>><b>UI</b>><b>Button</b>) and a Text GameObject (<b>Create</b>><b>UI</b>><b>Text</b>) and attach them both to the Inspector of your GameObject
//In Play Mode, press your Button to load the Scene, and the Text changes depending on progress. Press the space key to activate the Scene.
//<b>Note:</b> The progress may look like it goes straight to 100% if your Scene doesn’t have a lot to load.

using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class AsyncOperationProgressExample : MonoBehaviour
{
    public Text m_Text;
    public Button m_Button;

    void Start()
    {
        //Call the LoadButton() function when the user clicks this Button
        m_Button.onClick.AddListener(LoadButton);
    }

    void LoadButton()
    {
        //Start loading the Scene asynchronously and output the progress bar
        StartCoroutine(LoadScene());
    }

    IEnumerator LoadScene()
    {
        yield return null;

        //Begin to load the Scene you specify
        AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("Scene3");
        //Don't let the Scene activate until you allow it to
        asyncOperation.allowSceneActivation = false;
        Debug.Log("Pro :" + asyncOperation.progress);
        //When the load is still in progress, output the Text and progress bar
        while (!asyncOperation.isDone)
        {
            //Output the current progress
            m_Text.text = "Loading progress: " + (asyncOperation.progress * 100) + "%";

            // Check if the load has finished
            if (asyncOperation.progress >= 0.9f)
            {
                //Change the Text to show the Scene is ready
                m_Text.text = "Press the space bar to continue";
                //Wait to you press the space key to activate the Scene
                if (Input.GetKeyDown(KeyCode.Space))
                    //Activate the Scene
                    asyncOperation.allowSceneActivation = true;
            }

            yield return null;
        }
    }
}
```
