Struct GamepadState
Default state layout for gamepads.
Namespace: UnityEngine.InputSystem.LowLevel
Syntax
public struct GamepadState : IInputStateTypeInfo
Remarks
Be aware that unlike some other devices such as Mouse or Touchscreen, gamepad devices tend to have wildly varying state formats, i.e. forms in which they internally store their input data. In practice, even on the same platform gamepads will often store their data in different formats. This means that GamepadState will often not be the format in which a particular gamepad (such as XInputController, for example) stores its data.
If your gamepad data is arriving in a different format, you should extend the "Gamepad" layout and customize its Controls.
A real-world example of this is the Xbox Controller on macOS, which is supported through HID. Its layout looks like this:
{
"name" : "XboxGamepadOSX",
"extend" : "Gamepad",
"format" : "HID",
"device" : { "interface" : "HID", "product" : "Xbox.*Controller" },
"controls" : [
{ "name" : "leftShoulder", "offset" : 2, "bit" : 8 },
{ "name" : "rightShoulder", "offset" : 2, "bit" : 9 },
{ "name" : "leftStickPress", "offset" : 2, "bit" : 14 },
{ "name" : "rightStickPress", "offset" : 2, "bit" : 15 },
{ "name" : "buttonSouth", "offset" : 2, "bit" : 12 },
{ "name" : "buttonEast", "offset" : 2, "bit" : 13 },
{ "name" : "buttonWest", "offset" : 2, "bit" : 14 },
{ "name" : "buttonNorth", "offset" : 2, "bit" : 15 },
{ "name" : "dpad", "offset" : 2 },
{ "name" : "dpad/up", "offset" : 0, "bit" : 8 },
{ "name" : "dpad/down", "offset" : 0, "bit" : 9 },
{ "name" : "dpad/left", "offset" : 0, "bit" : 10 },
{ "name" : "dpad/right", "offset" : 0, "bit" : 11 },
{ "name" : "start", "offset" : 2, "bit" : 4 },
{ "name" : "select", "offset" : 2, "bit" : 5 },
{ "name" : "xbox", "offset" : 2, "bit" : 2, "layout" : "Button" },
{ "name" : "leftTrigger", "offset" : 4, "format" : "BYTE" },
{ "name" : "rightTrigger", "offset" : 5, "format" : "BYTE" },
{ "name" : "leftStick", "offset" : 6, "format" : "VC2S" },
{ "name" : "leftStick/x", "offset" : 0, "format" : "SHRT", "parameters" : "normalize,normalizeMin=-0.5,normalizeMax=0.5" },
{ "name" : "leftStick/y", "offset" : 2, "format" : "SHRT", "parameters" : "invert,normalize,normalizeMin=-0.5,normalizeMax=0.5" },
{ "name" : "rightStick", "offset" : 10, "format" : "VC2S" },
{ "name" : "rightStick/x", "offset" : 0, "format" : "SHRT", "parameters" : "normalize,normalizeMin=-0.5,normalizeMax=0.5" },
{ "name" : "rightStick/y", "offset" : 2, "format" : "SHRT", "parameters" : "invert,normalize,normalizeMin=-0.5,normalizeMax=0.5" }
]
}
The same principle applies if some buttons on your Device are swapped, for example. In this case, you can remap their offsets.
Constructors
GamepadState(GamepadButton[])
Create a gamepad state with the given buttons being pressed.
Declaration
public GamepadState(params GamepadButton[] buttons)
Parameters
Type | Name | Description |
---|---|---|
GamepadButton[] | buttons | Buttons to put into pressed state. |
Exceptions
Type | Condition |
---|---|
ArgumentNullException |
|
Fields
buttons
Button bit mask.
Declaration
public uint buttons
Field Value
Type | Description |
---|---|
UInt32 | Button bit mask. |
See Also
leftStick
Left stick position. Each axis goes from -1 to 1 with 0 being center position.
Declaration
public Vector2 leftStick
Field Value
Type | Description |
---|---|
Vector2 | Left stick position. |
See Also
leftTrigger
Position of the left trigger. Goes from 0 (not pressed) to 1 (fully pressed).
Declaration
public float leftTrigger
Field Value
Type | Description |
---|---|
Single | Position of left trigger. |
See Also
rightStick
Right stick position. Each axis from -1 to 1 with 0 being center position.
Declaration
public Vector2 rightStick
Field Value
Type | Description |
---|---|
Vector2 | Right stick position. |
See Also
rightTrigger
Position of the right trigger. Goes from 0 (not pressed) to 1 (fully pressed).
Declaration
public float rightTrigger
Field Value
Type | Description |
---|---|
Single | Position of right trigger. |
See Also
Properties
format
State format tag for GamepadState.
Declaration
public readonly FourCC format { get; }
Property Value
Type | Description |
---|---|
FourCC | Returns "GPAD". |
Implements
Format
Declaration
public static readonly FourCC Format { get; }
Property Value
Type | Description |
---|---|
FourCC |
Methods
WithButton(GamepadButton, Boolean)
Set the specific buttons to be pressed or unpressed.
Declaration
public GamepadState WithButton(GamepadButton button, bool value = true)
Parameters
Type | Name | Description |
---|---|---|
GamepadButton | button | A gamepad button. |
Boolean | value | Whether to set |
Returns
Type | Description |
---|---|
GamepadState | GamepadState with a modified buttons mask. |