FAQ & Troubleshooting
My callback is never called
Check these in order:
- Same identifier on both sides. An identifier event is never reached by a name invoke, and the other way around. See Identifiers vs. Names.
- Same type on both sides. A listener registered as Int is not called by Invoke Float Event. The log shows a warning when this happens.
- Register ran before Invoke. Events are not stored for later listeners. If the sender invokes the event before the listener has registered, for example both on BeginPlay, the listener misses it.
- Optional Target matches. If a target is set, only the listener registered by that exact object is called. See Targeting a Listener.
- The listener is still alive and registered. Destroyed objects and unregistered listeners are skipped.
Enable Log LogEventDispatcher Verbose to see every register and invoke. See Logging and Debugging.
My callback runs later than expected
Callbacks are queued and run on the next poll, normally the next frame. Turn on Dispatch Immediately if they must run inside the Invoke call. See Dispatching and Timing.
My callback is called twice
Registering the same callback again is ignored, so two calls mean two different listeners: for example two instances of the same Blueprint, or the same event registered with two different Custom Events.
Do events work in multiplayer?
Events are local to each game instance and are not replicated. Use an RPC or a replicated variable to reach other machines, then invoke the event locally. See Scope and Lifetime.
Do listeners survive level changes?
Yes. Events live in the Game Instance. Listeners on objects that are destroyed by the level change are removed automatically.
Can I send more than one value?
Use a Payload event with an object that holds all the values, or the String + Float / String + Int types for simple pairs.
Does the payload object get garbage collected before it arrives?
No. The plugin keeps it alive until every listener has received it.