# UnityEvent

> A zero argument persistent callback that can be saved with the Scene.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine.Events](/engine/6000.0/script-reference/unityengine/events.md)
* **Assembly:** UnityEngine.CoreModule
* **Inherits from:** [UnityEventBase](/engine/6000.0/script-reference/unityengine/events/unityeventbase.md)
* **Implements:** [ISerializationCallbackReceiver](/engine/6000.0/script-reference/unityengine/iserializationcallbackreceiver.md)

```csharp
public class UnityEvent : UnityEventBase, ISerializationCallbackReceiver
```

## Remarks

```csharp
using UnityEngine;
using UnityEngine.Events;

public class ExampleClass : MonoBehaviour
{
    UnityEvent m_MyEvent;

    void Start()
    {
        if (m_MyEvent == null)
            m_MyEvent = new UnityEvent();

        m_MyEvent.AddListener(DoSomething);
    }

    void Update()
    {
        if (Input.anyKeyDown && m_MyEvent != null)
        {
            m_MyEvent.Invoke();
        }
    }

    void DoSomething()
    {
        Debug.Log("Callback called");
    }
}
```

Note: UnityEvent can also be awaited in any async method.

## Constructors

| Constructor                                                                           | Description  |
| ------------------------------------------------------------------------------------- | ------------ |
| [UnityEvent()](/engine/6000.0/script-reference/unityengine/events/unityevent/ctor.md) | Constructor. |

## Methods

| Method                                                                                            | Description                                                                                                                                              |
| ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [AddListener](/engine/6000.0/script-reference/unityengine/events/unityevent/addlistener.md)       | Adds a non-persistent listener to the UnityEvent.                                                                                                        |
| [Invoke](/engine/6000.0/script-reference/unityengine/events/unityevent/invoke.md)                 | Invoke all registered callbacks (runtime and persistent).                                                                                                |
| [RemoveListener](/engine/6000.0/script-reference/unityengine/events/unityevent/removelistener.md) | Remove a non persistent listener from the UnityEvent. If you have added the same listener multiple times, this method will remove all occurrences of it. |

## Inheritance

**Inherited Members:**

* [UnityEventBase.GetPersistentEventCount()](/engine/6000.0/script-reference/unityengine/events/unityeventbase/getpersistenteventcount.md)
* [UnityEventBase.GetPersistentTarget(int)](/engine/6000.0/script-reference/unityengine/events/unityeventbase/getpersistenttarget.md)
* [UnityEventBase.GetPersistentMethodName(int)](/engine/6000.0/script-reference/unityengine/events/unityeventbase/getpersistentmethodname.md)
* [UnityEventBase.SetPersistentListenerState(int, UnityEventCallState)](/engine/6000.0/script-reference/unityengine/events/unityeventbase/setpersistentlistenerstate.md)
* [UnityEventBase.GetPersistentListenerState(int)](/engine/6000.0/script-reference/unityengine/events/unityeventbase/getpersistentlistenerstate.md)
* [UnityEventBase.RemoveAllListeners()](/engine/6000.0/script-reference/unityengine/events/unityeventbase/removealllisteners.md)
* [UnityEventBase.GetValidMethodInfo(Object, string, Type\[\])](/engine/6000.0/script-reference/unityengine/events/unityeventbase/getvalidmethodinfo.md#getvalidmethodinfo\(object-string-type\))
* [UnityEventBase.GetValidMethodInfo(Type, string, Type\[\])](/engine/6000.0/script-reference/unityengine/events/unityeventbase/getvalidmethodinfo.md#getvalidmethodinfo\(type-string-type\))
