In-Game Actions & Input Mappings
This page documents the action sets (inGameActions) and the input configuration (config) used to map device inputs (VR controllers, gamepads, keyboard) to gameplay actions.
Mappings
Mappings connect device events to action names. These are the active bindings for the default mapping set.
Keyboard
- M →
action_mute - F press/up →
shoot_start/stop - V →
thirdview_toggle - W/A/S/D and arrow keys → directional down/up actions
- E / Q → snap rotate right/left
- R →
reposition - L →
lookatme - F (down) →
flyme - H →
toggle_ui - F4 →
free_camera_toggle - Shift →
boost_down/up - Space →
jump_start/stop - Escape →
escape_down - ^ (backquote) →
backquote_down
Vive controllers
- Trackpad pressed move →
move - Trackpad west/east press →
snap_rotate_left/snap_rotate_right - Trackpad center/north/south press →
action_primary_down - Trackpad up →
action_primary_up - Menu →
menue(down),thumb_up(up) - Grip → grab/release + finger states
- Trigger → grab/release + finger states
- Scroll →
move_duck
Oculus Touch controllers
- Joystick west/east →
snap_rotate_left/snap_rotate_right - Trackpad pressed move →
move - Trigger (right) →
action_primary_down/up,shoot_start/stop - Trigger (left) →
boost_down/up - Grip →
primary_action_grab/release+ finger states - A → teleport start/stop
- X → jump start/stop
- Y →
flyme - B →
settingspanel - Axis move → left
move, rightscroll_move
Windows Mixed Reality controllers
- Joystick/Thumbstick west/east → snap rotate
- Trackpad pressed move →
move - Trackpad down → right
action_primary_down, leftsettingspanel - Trackpad up → right
action_primary_up - Menu →
menue(down/up) - Grip/Trigger → grab/release + click + finger states
- Axis move → left
move, rightscroll_move - Trackpad center down/up → left
settingspanel, rightaction_primary_down/up
Daydream / GearVR / Oculus Go
- Trackpad D-pad west/east → snap rotate
- Center press → primary / teleport start-stop (Oculus Go)
- North/South → menu / shoot (varies per device mapping)
- Trigger → shoot + grab + primary (Oculus Go mapping)
Gamepad
0→ jump start/stop5→ primary grab/release9→ settings panel10and6→ boost down/up2→ shoot start/stop14/15→ snap rotate left/right7→ action primary down / primary releaseaxisMoveWithDeadzone→ move
Action sets
Action sets separate “driving” controls from “menu / HUD” controls. Only one action set is active at a time.
- default (gameplay)
- hud (UI)
- move — Move
- snap_rotate_left — Snap Rotate Left
- snap_rotate_right — Snap Rotate Right
- action_mute — Mute
- action_teleport_down — Teleport Aim
- action_teleport_up — Teleport
- action_share_screen — Share Screen
- escape — Escape
- free_camera_toggle — Toggle Free Camera
- action_ui_select_down — Select UI item
- action_ui_select_up — Select UI item
Behaviours
Behaviours define how raw device inputs are interpreted (e.g., D-pad emulation, deadzones, scrolling).
- default
oculus-touch-controls:
joystick_dpad4Xr,msft_mr_axis_with_deadzoneXrvive-controls:
trackpad_dpad4,trackpad_scrollingwindows-motion-controls:
joystick_dpad4Xr,msft_mr_axis_with_deadzoneXr,trackpad_dpad4generic-tracked-controller-controls:
joystick_dpad4Xr,msft_mr_axis_with_deadzoneXr,trackpad_dpad4daydream-controls:
trackpadday_dpad4gearvr-controls:
trackpad_dpad4,trackpad_scrollingoculus-go-controls:
trackpad_dpad4gamepad-controls:
joystick_dpad4
Overriding Mappings
You can override or extend the default input mappings by creating a custom component and using AFRAME.registerInputMappings. This is useful for adding new actions or changing existing keybindings.
The registerInputMappings function takes a configuration object. If you set replace: true, it will completely replace the mappings for a given device and action set. If replace is false or omitted, it will merge the new mappings with the existing ones.
Example
Here is an example of a component that registers a new reload action, mapping it to the R key.
class SampleElement extends CapElement {
schema = {}
@query('#player-rig')
playerRig
async init() {
const config = {
replace: true,
mappings: {
default: {
keyboard: {
keyr_down: 'reload',
},
},
},
}
AFRAME.registerInputMappings(config)
this.el.sceneEl.addEventListener('reload', () => {
console.info('reload')
})
}
}
export default SampleElement