# UnityEvent

> A zero-argument event callback that persists with the Scene and allows the registration of runtime and persistent listeners.

## Definition

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

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

## Remarks

You can use this class to add runtime listeners or define persistent listeners in the Unity Editor. You can also use this class to manage callbacks for game events or UI interactions. This is particularly useful for game components to communicate without tight coupling. UnityEvent can also be awaited in any async method.

## Examples

```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(OnEventTriggered);
    }

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

    void OnEventTriggered()
    {
        Debug.Log("Callback executed");
    }
}
```

## Constructors

| Constructor                                                                           | Description                                         |
| ------------------------------------------------------------------------------------- | --------------------------------------------------- |
| [UnityEvent()](/engine/6000.6/script-reference/unityengine/events/unityevent/ctor.md) | Initializes a new instance of the UnityEvent class. |

## Methods

| Method                                                                                            | Description                                                  |
| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| [AddListener](/engine/6000.6/script-reference/unityengine/events/unityevent/addlistener.md)       | Adds a runtime listener to the UnityEvent.                   |
| [Invoke](/engine/6000.6/script-reference/unityengine/events/unityevent/invoke.md)                 | Invoke all registered callbacks both runtime and persistent. |
| [RemoveListener](/engine/6000.6/script-reference/unityengine/events/unityevent/removelistener.md) | Removes a runtime listener from the UnityEvent.              |

## Inheritance

**Inherited Members:**

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