Input
Adaptive Pad registers the DualSense™ wireless controller as an Unreal input device. Its buttons arrive as the standard gamepad keys, so anything written for an Xbox controller works without changes: Input Mapping Contexts, Input Actions, InputKey events, UMG focus navigation.
Key mapping
Standard gamepad keys
| Controller | Unreal key |
|---|---|
| ✕ Cross | Gamepad Face Button Bottom |
| ○ Circle | Gamepad Face Button Right |
| □ Square | Gamepad Face Button Left |
| △ Triangle | Gamepad Face Button Top |
| D-pad | Gamepad D-pad Up / Down / Left / Right |
| L1 / R1 | Gamepad Left Shoulder / Gamepad Right Shoulder |
| L2 / R2 (click) | Gamepad Left Trigger / Gamepad Right Trigger |
| L2 / R2 (axis, 0–1) | Gamepad Left Trigger Axis / Gamepad Right Trigger Axis |
| L3 / R3 | Gamepad Left Thumbstick Button / Gamepad Right Thumbstick Button |
| Left stick (−1–1) | Gamepad Left Thumbstick X-Axis / Y-Axis |
| Right stick (−1–1) | Gamepad Right Thumbstick X-Axis / Y-Axis |
| Create | Gamepad Special Left |
| Options | Gamepad Special Right |
Extra keys
Buttons that a generic gamepad does not have get their own keys, in the DualSense category of the key picker.
| Controller | Unreal key | Name in C++ |
|---|---|---|
| PS button | DualSense PS Button | DualSense_PS |
| Touchpad click | DualSense Touchpad Click | DualSense_Touchpad |
| Mute button | DualSense Mic Button | DualSense_Mic |
| Touchpad, first finger (pressed while touching) | DualSense Touchpad Finger 1 | DualSense_Touch1 |
| Touchpad, first finger position (0–1 from the left / top) | DualSense Touchpad Finger 1 X / Y | DualSense_Touch1_X / _Y |
| Touchpad, second finger | DualSense Touchpad Finger 2 (+ X / Y) | DualSense_Touch2 (+ _X / _Y) |

Using Enhanced Input
Nothing special is needed: add the keys to an Input Mapping Context as you would for any gamepad, and add the context to the player with Add Mapping Context.
Create an Input Action
For example IA_Pause, with value type Digital (bool).
Map it
In your Input Mapping Context, add a mapping for IA_Pause and pick Gamepad Special Right (Options). Add a second mapping with the P key for keyboard players.
Handle it
In the Player Controller, add the EnhancedInputAction IA_Pause event and do your thing on Started.
The same works for the extra keys: a mapping on DualSense Touchpad Click opens a map, DualSense PS Button opens a pause menu, and so on.
Touchpad
Each finger works as a button (pressed while it touches the pad) and two axes with its position, from 0 to 1 with the origin in the
top-left corner. The axes are sent only while the finger is down, so they keep the last position after it lifts.
To read both fingers at once, with an id that changes at every new touch (to tell a new tap from a finger that slid), use DS Get Touchpad.
Motion sensors
The gyroscope and the accelerometer reach Unreal in two ways.
- Unreal's motion keys:
Tilt,Rotation Rate,GravityandAcceleration, the same keys phones use. Map Rotation Rate in an Input Mapping Context for gyro aiming: it is the angular velocity in radians per second. Motion input must be enabled in Project Settings → Input → Enable Motion Controls (on by default). - DS Get Motion: the same data in friendlier units, for UI, debug or custom logic.
Field of FDSMotion | Unit | Meaning |
|---|---|---|
Gyroscope | degrees per second | Rotation around X (pitch), Y (yaw), Z (roll) |
Accelerometer | g | Gravity included: about (0, 1, 0) with the controller flat and still |
Gravity | g | The accelerometer smoothed over about 0.1 s |
UserAcceleration | g | Accelerometer − Gravity: how the controller is being moved |
Tilt | degrees | Pitch (front edge up is positive) and Roll (right side up is positive), from Gravity. Yaw is always 0 |
To turn an object like the controller in the player's hands, use DS Get Orientation: the gyroscope integrated by the plugin, as a rotator in Unreal's axes, zero when the controller is held level with its front pointing forward. Add it to the object's base rotation with Compose Rotators. The integration drifts slowly, so give the player a way to recenter with DS Reset Orientation.
The axes are the controller's own: X to the right, Y up, Z towards the player. The sensors are calibrated with the data each controller stores in its memory.
To check the values while you work, type DualSense.ShowInput 1 in the console: see Troubleshooting.
Battery, headphones and trigger feedback
- DS Get Battery: level from
0to1(the controller reports it in steps of 10%) and state: Discharging, Charging, Full or Error. - DS Are Headphones Connected:
truewhile headphones are plugged into the controller's jack. - DS Get Trigger Feedback: the status byte the controller sends back for each adaptive trigger. Sony does not document it, so it is given raw (plus its two halves) for experiments and debugging.
Notes
- Stick dead zones are not applied by the plugin. Use Enhanced Input's Dead Zone modifier on the stick mappings, as you would for other gamepads.
- Triggers report both a digital key (pressed or not) and an analog axis from
0to1. Adaptive trigger effects do not change these values: an effect that blocks the trigger halfway simply keeps the axis below1. - With more than one controller, read Multiple controllers: in this version all controllers send input as the first player.