Subscribing to a delegate without unsubscribing can be a memory leak.
Under certain conditions—especially if Configurable Enter Play Mode is enabled—static delegates will persist between Play Mode sessions. If subscribers are not cleaned up then this can also be a leak.
These leaks can cause a NullReferenceException when they reference a Unity Object that was destroyed (destroyed manually, or destroyed by exiting Play Mode).
Unsubscribe from delegates—especially those that are static— when your object is destroyed or you should no longer be subscribed.
// Unsubscribing a single subscriber
s_MyStaticEvent -= Subscriber;
// Removing all subscribers
s_MyStaticEvent = null;You can generally do this from OnDestroy, which will be called when a Component is destroyed (destroyed manually, or destroyed by exiting Play Mode).
If you are using Configurable Enter Play Mode, you should unsubscribe explicitly using the callback mentioned in the documentation.
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
static void Unsubscribe()
{
s_MyStaticEvent = null;
}