Troubleshooting — Common Issues & Solutions¶
← Back to Index | FAQ | Getting Started | Glossary
Not receiving messages¶
- Ensure your
MessageRegistrationTokenis enabled (Enable inOnEnable, Disable inOnDisable). - Verify the category matches the emission (Untargeted vs Targeted vs Broadcast).
- Targeted/Broadcast require a valid
InstanceId; ensure the target/source object exists when you emit. - In Unity, confirm your
MessagingComponentexists on sender/receiver GameObjects. - CRITICAL: If inheriting from
MessageAwareComponent, ensure your overrides call base methods: base.RegisterMessageHandlers()- Call this FIRST in your override to preserve default setup (including string message demos) and parent class registrations.base.Awake()- Call this if you overrideAwake(), or your token won't be created (this is the #1 cause of handlers not firing).base.OnEnable()/base.OnDisable()- Call these so the token actually enables/disables.- Never use
newto hide Unity methods (e.g.,new void OnEnable()); always useoverrideand callbase.*.
Registration timing
- ALWAYS register message handlers in
Awake(), notStart(). MessageAwareComponentautomatically callsRegisterMessageHandlers()inAwake().- Registering in
Awake()ensures handlers are ready before other components'Start()methods run. - If you register in
Start(), you may miss messages emitted by other components in theirStart()methods.
Unexpected ordering
- Check
priorityvalues on registrations; lower runs earlier. Same priority is registration order. - Interceptors always precede handlers and can cancel; confirm interceptors return
true.
Double registration or over‑deregistration warnings
- Avoid calling stage/enable multiple times; pair registrations and lifecycles consistently.
- Review logs with
bus.Log.Enabled = trueto see the registration history.
Allocations/boxing
- Prefer struct messages implementing the generic interfaces:
I*Message<T>. - Use by‑ref handler overloads to avoid copies.
Emitting while disabled
- If you need to emit when a component is disabled, use a bus not tied to enable state or set
emitMessagesWhenDisabledonMessagingComponent.
Diagnostics overhead
- Disable diagnostics in release builds (
IMessageBus.GlobalDiagnosticsMode = false).
Related Documentation¶
- Get Unstuck
- → FAQ — Common questions answered
- → Getting Started — Learn the basics
- → Glossary — Understand the terminology
- Debug & Inspect
- → Diagnostics — Inspector tools and debugging
- → Listening Patterns — Verify you're listening correctly
- → Message Types — Ensure you're using the right type
- Examples
- → Mini Combat sample — See working code
- → Common Patterns — Real-world solutions