Two identical joysticks?

Yup, that’s fine, too.

Alternatively, you can set things explicitly for handedness. There’s support for “usages” on devices. E.g. a device can be marked as having “LeftHand” usage and you can bind specifically to devices with that usage.

In the UI, this is supported out of the box for XR controllers, but unfortunately, for other controllers it currently requires dropping the control paths into text mode and manually editing them.

If you want to give this a try, simply pick a control, say the trigger on a joystick, drop it into text mode (in the current UI that’s the “…” button; in the next package, it’s the “T” button which is a toggle now), and edit the path like

// From something like
<Joystick>/trigger

// To something like
<Joystick>{LeftHand}/trigger

At runtime, you can simply assign usages to the devices you have. Like, for example:

InputSystem.SetDeviceUsage(firstJoystick, CommonUsages.LeftHand);
InputSystem.SetDeviceUsage(secondJoystick, CommonUsages.RightHand);

This works for arbitrary usages. You can also come up with your own instead of using “LeftHand” and “RightHand”. In the end, it’s just string tags. You can also have more than one on a device.

In this setup, you can also forego PlayerInput and don’t need to worry about duplicating actions or any other multiplayer concerns. The usages disambiguate input from the devices sufficiently.

For actions, it’s mainly bugfixing and polishing that will happen. Overall, we’re more or less feature complete. Couple of lose ends to tie up around PlayerInput. Otherwise, there’s a few things to do around UI support, work around improving rebinding support, and polishing/improving the editor UI. And yeah, fixing and fixing and fixing :slight_smile: