# OnEnable()

> Called when a component of an active GameObject is first enabled.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine](/engine/6000.3/script-reference/unityengine.md)

```csharp
public void OnEnable()
```

### Remarks

`OnEnable` is called in the following scenarios: \* When entering Play mode, if the GameObject is active ([GameObject.activeInHierarchy](/engine/6000.3/script-reference/unityengine/gameobject/activeinhierarchy.md) == `true`) and the script component is enabled ([Behaviour.enabled](/engine/6000.3/script-reference/unityengine/behaviour/enabled.md) == `true`). \* When enabling the script component at runtime (via code or the Inspector), if the GameObject is already active. \* When activating the GameObject (or one of its inactive parent GameObjects) at runtime, if the script component is already enabled. `OnEnable` is always called after [MonoBehaviour.Awake()](/engine/6000.3/script-reference/unityengine/monobehaviour/awake.md) and before [MonoBehaviour.Start()](/engine/6000.3/script-reference/unityengine/monobehaviour/start.md) on entering Play Mode. `OnEnable` cannot be a [coroutine](/engine/6000.3/manual/scripting/object-oriented-development/coroutines-section/coroutines.md). Additional Resources: [MonoBehaviour.OnDisable()](/engine/6000.3/script-reference/unityengine/monobehaviour/ondisable.md).

### Examples

```csharp

// Implement OnDisable and OnEnable script functions.
// These functions will be called when the script component
// is enabled.
// This example also supports the Editor. The Update function
// will be called, for example, when the position of the
// GameObject is changed.

using UnityEngine;

[ExecuteInEditMode]
public class PrintOnOff : MonoBehaviour
{
    void OnDisable()
    {
        Debug.Log("PrintOnDisable: script was disabled");
    }

    void OnEnable()
    {
        Debug.Log("PrintOnEnable: script was enabled");
    }

    void Update()
    {
#if UNITY_EDITOR
        Debug.Log("Editor causes this Update");
#endif
    }
}
```
