@tabooharmony/roblox-input
Use when handling Roblox keyboard, mouse, gamepad, touch, motion input, or cross-platform action binding.
| name | roblox-input |
| description | Use when handling Roblox keyboard, mouse, gamepad, touch, motion input, or cross-platform action binding. |
| last_reviewed | 2026-09-05 |
| sources | https://devforum.roblox.com/t/the-correct-way-to-design-mobile-buttons/2494558, https://create.roblox.com/docs/reference/engine/classes/UserInputService, https://create.roblox.com/docs/projects/server-authority, https://create.roblox.com/docs/ui/3D-drag-detectors, https://create.roblox.com/docs/ui/ui-drag-detectors |
Roblox Input
When to Load
Load for keyboard, mouse, gamepad, touch, motion, or cross-platform action binding. Client-side only. For simulation-affecting input in a Server Authority project, use the Input Action System rather than traditional input events.
Quick Reference
Core events (UserInputService): InputBegan, InputChanged, InputEnded fire as (input: InputObject, gameProcessedEvent: boolean). InputBegan does NOT fire for mouse wheel. Events only fire while the client window is focused.
Prefer ContextActionService over InputBegan for gameplay: free conflict resolution (chat won't steal H) and free mobile buttons:
local CAS = game:GetService("ContextActionService")
local function onAction(name, state, _input)
if name == "Jump" and state == Enum.UserInputState.Begin then
humanoid.Jump = true
end
end
CAS:BindAction("Jump", onAction, true,
Enum.KeyCode.Space, Enum.KeyCode.ButtonA)
BindAction(name, handler, createTouchButton, ...inputTypes). Handler returns ContextActionResult.Sink to consume, .Pass to fall through.
Server Authority: use InputAction/InputContext for inputs that affect the core simulation, store the input state where the synchronized simulation can read it, and process it through RunService:BindToSimulation() (requires Workspace.UseFixedSimulation enabled in Studio). ContextActionService remains appropriate for UI-only or classic-project actions.
Gamepad UI focus: separate gameplay bindings from menu selection. Set GuiService.SelectedObject, mark controls Selectable, and test nested/modal navigation.
Gamepad: use GetConnectedGamepads() and listen to connection changes.
Touch: use high-level gesture events or raw TouchStarted/TouchMoved/TouchEnded when tracking fingers.
Dragging: DragDetector (3D parts/models, physics-capable) and UIDragDetector (UI) make objects draggable with zero code; events DragStart/DragContinue/DragEnd.
Pitfalls:
gameProcessedEvent=truein InputBegan → UI consumed it. Filter for gameplay.BindActionis stack-based: most-recent wins. UseBindActionAtPriority.- Client-only. Server scripts silently no-op.
JumpRequestfires multiple times per jump; debounce.- Mouse wheel only fires
InputChanged.
Full event tables and polling methods: references/full.md.
Loading...
Select a file to preview
Analyzing security...
Checking scan reports and verification data.
Bill of Materials
Everything this skill can do — files, network, commands, and more.