Initialize UnityEvent via script

So, I have a UnityEvent< T > variable in my script and I want to add a listener to it, but since I am not adding any listeners through the inspector, the variable is never initialized and throws a NullReferenceException when I call “AddListener” on the Awake method of my script.

I checked and, indeed, it is null when I try to call its method, but since I’m using the generic version, which is an abstract class, I’m not able to initialize it by simply calling “new UnityEvent< T >()”.

Is there any way to make this work without having to create a derived class of my own?

UnityEvent class is a generic abstract class. it is not a concrete class.
So we can not instantiate it directly.

I tried it which worked for me

  1. Derive another class from UnityEvent class.

  2. Now declare variable of that class in monobehaviour. It will be instantiated and will be shown in inspector also.

For example

[System.Serializable]
public class OnClickEvent : UnityEvent<bool>
{

}

public class NewBehaviourScript : MonoBehaviour
{
    public OnClickEvent onClick = new OnClickEvent();
}