Quick answer: Replace the EventSystem’s StandaloneInputModule with InputSystemUIInputModule. For direct touch reads, call EnhancedTouchSupport.Enable().
After switching to the new Input System, UGUI buttons don’t respond to touches on mobile. The EventSystem still uses the old input module.
Swap the Input Module
Select the EventSystem GameObject. It has a StandaloneInputModule — the legacy one. Click “Replace with InputSystemUIInputModule” (Unity offers this button), or remove the old component and add InputSystemUIInputModule manually.
The new module routes new-Input-System pointer/touch events into UGUI’s event system.
Project Settings
Project Settings → Player → Active Input Handling. If set to “Input Manager (Old)”, the new system’s UI module gets no data. Use “Input System Package (New)” or “Both”.
Direct Touch Reads
If you also read touches directly (not through UGUI):
using UnityEngine.InputSystem.EnhancedTouch;
void OnEnable() => EnhancedTouchSupport.Enable();
void Update()
{
foreach (var t in Touch.activeTouches) { ... }
}
EnhancedTouchSupport must be enabled before Touch.activeTouches returns anything.
Verifying
On a device or simulator, taps hit UGUI buttons. Drag and multi-touch work. Direct touch reads (if used) populate activeTouches.
“New Input System needs its own UI module. Swap StandaloneInputModule for InputSystemUIInputModule.”
UI Toolkit has its own input path — this fix is specifically for UGUI (Canvas-based) UI.