Quick answer: One EventSystem global, marked DontDestroyOnLoad. Remove EventSystem GameObjects from additive scenes.
Bootstrap scene + Additive UI scene. Both have an EventSystem. UI works in editor, breaks after additive load.
The Fix
BootstrapScene:
GameObject EventSystem (with EventSystem + InputSystemUIInputModule)
DontDestroyOnLoad(this) on Awake
AdditiveScenes:
Remove EventSystem GameObjects entirely
// Optional bootstrap guard
void Awake() {
var all = FindObjectsOfType<EventSystem>();
if (all.Length > 1) {
foreach (var es in all)
if (es != this.GetComponent<EventSystem>())
Destroy(es.gameObject);
}
}
Single global event system means consistent input routing. DontDestroyOnLoad survives scene transitions.
Verifying
Console clean. UI clicks land consistently across additive scene swaps.
“One EventSystem. UI consistent.”
Related Issues
For UI Graphic Raycaster, see Raycaster. For TMP InputField caret, see TMP caret.
One EventSystem. UI consistent.