When you are playing a game on PC (especially local multiplayer) many developers want to change how input devices are "mapped" to different players. For example, a single player game might want the keyboard and gamepad to apply input to the same ULocalPlayer, while a split screen game may want the keyboard to control player 1, and the gamepad for player 2. 

Right now there is literally no way to define this behavior in the engine without writing some custom slate input mappings or overriding the game viewport client.

API's like XInput do not have the ability to check for "unique" input devices in the same capacity as game input does. It would be awesome to have some overridable UObject/UClass for a "Schema" which devs could override and specify how they want to handle input devices being mapped in their game. 

On Consoles, this mapping is handled for us by the OS (user sign on/device picker) so really this is only needed on PC. 

It would be even more helpful to change IInputDevice to have an overridable function to handle a mapping from int32 -> FInputDeviceId or something, or otherwise somehow force every IInputDevice module to keep a mapping from their internal "controller identifiier" type to the engine's FInputDeviceID. We can probably accomplish this by extending the IPlatformInputDeviceMapper. 

Steps to Reproduce
  1. Disable XInput and enable Game Input for Windows.
  2. Enable the processing of gamepads
  3. Connect two Xbox gamepads
  4. PIE in lyra split screen local mulitplayer map

Result: They both map to the same platform user

Expected: they map to each individual platform user that would be spawned. 

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-206727 in the post.

Login to Vote

ComponentUE - Gameplay - Input
Affects Versions5.4
Target Fix5.5
CreatedFeb 13, 2024
UpdatedFeb 22, 2024