Currently the only way I can find to have multiplayer in the new input system is to have a player input manager with prefabs that have the player input component. I find this to be kind of restricting and convoluted. Even if there was a way to change the controller the player input listens to, I cant find a way to listen to a button release.
ATM it’s possible to do so but not necessarily that efficient. You can set PlayerInputManager to join through an action, bind the action to something like “/" (will have to switch the UI to text mode – the little T button – to do that) and add a “Press” interaction and set its “Behavior” to “ReleaseOnly”. Downside to casting a wide net like "/” is that this may catch a pretty large number of controls which will all get individually bound to.
Note that the components are a quick start but they aren’t don’t cater to every use case. However, they are themselves built on the public APIs of the input system so there’s nothing that you can’t do yourself through the API with some scripting. For that kind of stuff, the key API is InputUser (not yet well documented).
You can also skip PlayerInputManager and use PlayerInput only. E.g. write your own join logic and call PlayerInput.Instantiate() to spawn players with specific devices and/or control schemes.