namespace Unity.VisualScripting { /// /// Called before the machine is destroyed. /// [UnitCategory("Events/Lifecycle")] [UnitOrder(7)] public sealed class OnDestroy : MachineEventUnit { protected override string hookName => EventHooks.OnDestroy; public override void StopListening(GraphStack stack) { // StopListening is typically triggered when the object is disabled or destroyed // OnDestroy is a special case event where we want it to continue listening even when the object // is disabled. It only unregisters itself on destruction and not before. // That's why this method is overriden to do nothing. } private protected override void InternalTrigger(GraphReference reference, EmptyEventArgs args) { base.InternalTrigger(reference, args); // Stop listening for events after we're triggered (i.e when we're destroyed) using var stack = reference.ToStackPooled(); base.StopListening(stack); } } }