Speech Bubble Manager
Overview
The SpeechBubbleManager is a persistent singleton (DontDestroyOnLoad) that must exist in the scene for the bubble system to function. If none is present, one is auto-created at runtime as an empty GameObject — though without a Default Bubble Prefab assigned, no bubbles will render.
Add via Component menu:
Malbers Quest Forge → Speech Bubble Manager

Properties
Global Settings
Max Visible Bubbles
Int (1–20)
5
Hard cap on how many bubbles can be visible simultaneously. When eligible bubble count exceeds this, only the closest N (by distance) are shown.
Update Interval
Float (0.05–1)
0.1
How often (in seconds) the Manager runs its visibility update pass. Lower values are more responsive but use slightly more CPU.
Global Max Distance
Float
50
Any bubble beyond this distance is filtered out before the priority sort, regardless of its own activation distance.
Prioritisation
Prioritize by Distance
Bool
true
When true, eligible bubbles are sorted by DistanceToPlayer ascending before the cap is applied — closest NPCs always win. When false, bubbles compete in registration order.
Priority Update Interval
Float (0.1–2)
0.2
How frequently the Manager re-evaluates which bubbles are in the top N. A requested update (e.g. from dialogue starting) also triggers an immediate re-evaluation regardless of this interval.
Object Pooling
Enable Pooling
Bool
true
When true, bubble UI instances are reused from a pool rather than instantiated/destroyed. Strongly recommended for scenes with many NPCs.
Initial Pool Size
Int
10
Number of bubble instances pre-instantiated at Awake. Set this to at or above Max Visible Bubbles to avoid runtime allocations.
Default Bubble Prefab
GameObject
None
The prefab instantiated for pooling. Must have a SpeechBubbleUI component. Required — no bubbles render without it.
Performance
Use Performance Optimization
Bool
true
Reserved flag for disabling all bubble processing when the player is very far from any NPC.
Performance Disable Distance
Float
100
Distance threshold for the above optimisation.
Manager Public API
HideAllBubbles(bool immediate = false)
Calls ForceHide() on every registered bubble. Use for cutscenes, menus, or loading screens.
ShowAllBubbles()
Calls ReEnableAfterForceHide() on every registered bubble and requests a visibility update.
RequestVisibilityUpdate()
Flags the Manager to run a full visibility update on the next Update() tick, bypassing the priority update interval.
GetVisibleBubbleCount()
Returns the count of currently visible bubbles.
CanShowMoreBubbles()
Returns true if the visible count is below maxVisibleBubbles.
GetRegisteredBubbles()
Returns a copy of the full registered bubble list.
GetVisibleBubbles()
Returns a copy of the currently visible bubble list.
GetDebugStats()
Returns a formatted string: registered count, eligible count, visible/max, pooled count, active count. Displayed as an on-screen overlay in Play Mode when Debug Mode is enabled.
Last updated