UnityEvent.Invoke Generates Garbage?

Hi!

I created a simple Trigger component:

public class Trigger : MonoBehaviour {

    public enum DisableMode
    {
        None,
        Enter,
        Exit
    }
    public DisableMode disableMode;


    [System.Serializable]
    public class TriggerEvent : UnityEvent { }

    public TriggerEvent onTriggerEnter;
    public TriggerEvent onTriggerExit;

    // privates
    private Collider m_collider;
    private bool m_triggered;

    void Awake()
    {
        m_collider = GetComponentInChildren<Collider>();
    }

    void OnEnable()
    {
        m_collider.enabled = true;
        m_triggered = false;
    }

    public void Nothing()
    {

    }

    void OnTriggerEnter(Collider other)
    {
        if (m_triggered)
            return;

        m_triggered = true;
        onTriggerEnter.Invoke();
        
        if (disableMode == DisableMode.Enter)
            m_collider.enabled = false;
    }

    void OnTriggerExit(Collider other)
    {
        onTriggerExit.Invoke();

        if (disableMode == DisableMode.Exit)
            m_collider.enabled = false;
    }

}

I created the Nothing method for demonstration purpose and assigned it to onTriggerEnter event:
101792-setup.png

As you can see from this screenshot, Invoking an event with an empty action will generate 0.6KB garbage. Is there something I’m doing wrong? I’m sure this shouldn’t happen.

Thank you!

If you are using less than 2 listeners use C sharp events and if more then unity events. Unityevents creates garbage when dispatched (the first time) where C# events do not.

C sharp events tend to be faster than unitys anyway.

I would like to know the same thing.