Quick answer: Unity Input System action event handler firing without the originating control after action.Disable()? Disable cancels pending callbacks but doesn't clear the queue - guard handlers with control validity.

Action callback fires; callbackContext.control is null. Crash.

Validate in handler

if (context.control == null) return;

Defensive; safe across disable/enable cycles.

Or wait for next frame

Process events in Update, not callback. Skips the partial-state window.

Audit Disable timing

Most Disable bugs stem from same-frame callbacks. Document the pattern.

“Action disable doesn't atomically drain callbacks. Drain is best-effort.”

If you toggle actions at runtime, defensive callback handlers are non-optional. The bug class is silent except when it isn't.

Related reading