Quick answer: Control Path on the OnScreenStick = <Gamepad>/leftStick. Action binding must include the same path. Multi-Touch on for two-stick layouts. Behavior = Relative for fixed sticks, Exact for “tap anywhere” sticks.
You drop OnScreenStick onto a Canvas, build to mobile, the stick visually moves but the player doesn’t. The Control Path needs to match the action binding exactly, multi-touch may need enabling, and behavior mode picks whether the stick teleports.
The Symptom
OnScreenStick widget moves visually with the touch, but no Move action fires. Or stick produces input but second OnScreenStick (look) doesn’t. Or the stick jumps to wherever you tap, not back to its origin.
What Causes This
OnScreenStick simulates a virtual gamepad device that the new Input System sees as a control. The simulation works only if:
- The Control Path field is set to a valid path.
- Your InputAction has a binding to the same path.
- Multi-touch is enabled when you have multiple sticks.
The Fix
Step 1: Control Path. Select the OnScreenStick GameObject. Inspector → OnScreenStick → Control Path. Click the small selector and pick <Gamepad>/leftStick for the left stick. For the right stick on a different OnScreenStick, pick <Gamepad>/rightStick.
Step 2: Action binding. Open your Input Actions asset. Move action → Add Binding (or 2D Vector Composite) → pick path <Gamepad>/leftStick. Now the action listens to the same virtual stick the on-screen widget drives.
InputActionAsset:
Player Map:
Move (Value, Vector2):
<Gamepad>/leftStick
[Composite WASD] (optional, for editor testing)
Step 3: Multi-Touch. On both OnScreenStick components: tick “Use Multi-Touch”. Without it, the second touch is captured by the system but assigned to whichever stick’s touchable area happens to win first.
Step 4: Behaviour mode. Relative locks the visual stick to its anchor; finger movement past the radius gets clamped. Exact moves the stick origin to the touch start point — useful for “tap-anywhere-to-move” designs where the player doesn’t need to look.
Touch Simulation
For Editor testing without a touch device, enable EnhancedTouch and use mouse simulation:
using UnityEngine.InputSystem.EnhancedTouch;
EnhancedTouchSupport.Enable();
TouchSimulation.Enable();
Now mouse drags simulate single-touch in the editor for sanity checks before deploying.
Verifying
Window → Analysis → Input Debugger. Run on device or with mouse simulation. Drag the on-screen stick. The Gamepad device should appear in the device list with leftStick / rightStick values changing live.
If the device shows but values don’t change, the Control Path is wrong. If the device doesn’t show, OnScreenStick isn’t enabled or its GameObject is hidden.
“Path on stick. Path on action. Multi-touch on. Sticks track.”
Related Issues
For Input rebind not persisting, see rebind persistence. For touch screen UI events not firing, see UI button.
Path matches. Multi-touch on. The stick drives.