input-systems
Agent skill fromgamedev-skills/awesome-gamedev-agent-skills
Architect game input — action mapping (abstracting keys into named actions), rebinding with conflict detection and persistence, multi-device support (keyboard, gamepad, touch), analog deadzones, and feel features like input buffering and coyote time, plus accessibility. Engine-neutral. Use when the user mentions input mapping, rebind controls, gamepad support, deadzone, input buffering, coyote time, or accessible controls.
How to install input-systems
install input-systems
# install the awesome-gamedev-agent-skills pack with the skills CLI
npx skills add gamedev-skills/awesome-gamedev-agent-skills# or add only this skill to Claude Code: copy the folder
skills/disciplines/input-systems/
# into
~/.claude/skills/input-systems/ (all projects)
.claude/skills/input-systems/ (one project)
1# Input systems23Never wire gameplay to raw keys. Map physical inputs (a key, a button, a touch)4to named **actions** (`jump`, `interact`, `move`), and let gameplay read actions.5That one indirection gives you rebinding, multi-device support, and accessibility6almost for free. This skill is the engine-neutral architecture; bind it to7`unity-input-system`, `unreal-enhanced-input`, or Godot's `InputMap`.89## When to use1011- Use to design an input layer: actions, bindings, multiple devices, and a12 rebinding UI with conflict detection and saved bindings.13- Use to add analog handling (deadzones, sensitivity) and game-feel features14 (input buffering, coyote time).15- Use to make controls accessible (full remapping, hold-vs-toggle, sensitivity,16 no required simultaneous presses).1718**When *not* to use:** for an engine's concrete input package/API, use19`unity-input-system`, `unreal-enhanced-input`, or Godot's InputMap. For the20movement/jump *physics* the buffer feeds, see `physics-tuning` and the engine21movement skill. Persisting bindings to disk is `save-systems`.2223## Core workflow24251. **Define actions, not keys.** Gameplay asks "is `jump` pressed?", never "is26 Space pressed?". Actions are the stable contract; bindings are data.272. **Bind per device.** Each action holds bindings for keyboard, gamepad, and28 touch. The active device is whichever last sent input; swap UI prompts to match.293. **Read the right edge.** Use *pressed-this-frame* (edge) for discrete actions30…
Excerpt shown under the repository's Apache-2.0 license.
