Device profiles map supported controllers on various platforms to a strict set of named controls that can be relied upon to be present. Physical positions (particularly for action buttons) will match across devices for uniformity.
LeftStickLeft, LeftStickRight, LeftStickUp, LeftStickDown, LeftStickButton
RightStickLeft, RightStickRight, RightStickUp, RightStickDown, RightStickButton
DPadLeft, DPadRight, DPadUp, DPadDown
Action1, Action2, Action3, Action4
LeftTrigger, RightTrigger
LeftBumper, RightBumper
Command
Note: the API makes little distinction between analog and button controls, so both a float
value and bool
state can be queried for any input.
Of course, there are a few devices which may only have some of these controls, but wherever possible they are mapped. You can generally rely on these all being available.
You’ll notice no other specific face buttons are in the standard set, simply because there are so many of them (start, back, select, option, system, menu, etc.) and every controller is different. Some controllers only have a single “menu” button. These buttons are mapped to non-standard controls, but they have also all been mapped to a single alias called Command
.
A full list of possible mapped controls (both standard and non-standard) are represented by the enum
InputControlType
.
Non-standard controls can be queried just like standard controls, but be aware they are controller specific. Using them is not recommended unless you plan to only support a specific controller.
Unsupported or unknown devices can be used, however their default mappings are utterly unpredictable. From the API, inputs for unsupported devices will appear as Button0
thru Button19
and Analog0
thru Analog9
. Do with them what you will.