- Home /
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?
Answer by Brijs · Jun 13, 2016 at 01:26 PM
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();
}
Yeah, I figured this would be the best (if not the only) way. I wanted to just use UnityEvent< T > and have it work, but since that class is abstract it only makes sense it wouldn't, my bad...
Thanks for the answer!
Your answer
Follow this Question
Related Questions
Some help for "animation event triggers multiple times" 0 Answers
Base class variables not initialized for sub class? 1 Answer
NullReference exception after StopCoroutine 2 Answers
Has my project's data corrupted? Script keeps returning null but 20 minutes ago it wasn't? 1 Answer
NullReferenceException When Using Composite Design Pattern 2 Answers