El sistema de acción de entrada multiplataforma te permite conectar acciones y organizar enlaces a través de varios dispositivos de hardware en el tiempo de edición. Combinado con contextos, puedes configurar y editar fácilmente un sistema de entrada modular que funcione en cualquier dispositivo en cualquier fase de juego. Los casos de uso incluyen:
- Un sistema de disparos en primera persona con acciones que cambian dinámicamente dependiendo de si el jugador está en modo de batalla o en modo espectador.
- Un sistema de conducción integral equipado con aceleración/desaceleración, potenciadores de coche y estaciones de combustible.
- Teclas de acceso rápido para un sistema de habilidades en un juego de lucha para intercambiar movimientos sin problemas sin que los jugadores pierdan un golpe.
Contextos de entrada
Un InputContext es una colección de acciones que contiene acciones de entrada relacionadas, por ejemplo PlayContext para controles de personajes en el juego y NavContext para controles para navegar por los menús de la interfaz de usuario. Puedes habilitar/deshabilitar contextos (y sus acciones correspondientes) a través de su propiedad Enabled, como habilitar el NavContext cuando se abre un menú de inventario y luego cambiar al PlayContext cuando el jugador cierra el menú y regresa a la jugabilidad principal.
Incluso si un juego puede no usar múltiples contextos de entrada inicialmente, se recomienda crear un contexto principal en el nivel superior de cualquier sistema de entrada, por ejemplo, la instancia de PlayContext para la entrada que ocurre durante la jugabilidad.
- RECOMENDADOCrea una Folder llamada Inputs dentro de ReplicatedStorage para contener varios contextos de entrada.

Inserta un nuevo InputContext en la carpeta y renómbralo a PlayContext.

En la ventana de Propiedades, establece Priority en 2000 y habilita Sink. Un contexto con Sink habilitado consume eventos de entrada para sus KeyCodes vinculados en su nivel de prioridad, bloqueando esas entradas de alcanzar contextos de menor prioridad. Esto es práctico para casos de uso como una pantalla de inventario que debe suprimir entradas específicas del juego mientras está abierta. En este ejemplo, se le da a PlayContext un Priority suficientemente alto para hundir sus entradas vinculadas antes de que los contextos por defecto de PlayerScripts las procesen.
Acciones de entrada
Un InputAction define una mecánica de acción de juego como "Saltar", "Correr" o "Disparar". Estas acciones se asignan a entradas de hardware utilizando enlaces de entrada.
Un InputAction puede ser de varias variaciones dependiendo de su propiedad Type (Enum.InputActionType). El valor predeterminado es Bool, diseñado para recibir valores true/false de la pulsación/liberación de entradas como ButtonA, E o MouseLeftButton.
| Tipo de Acción de Entrada | Ejemplo de Uso |
|---|---|
| Bool | Acciones desencadenadas como saltar, disparar, correr, etc., con soporte para umbrales de presionado/liberado en entradas analógicas. |
| Direction1D | Acciones variables de cero a pleno como el pedal del acelerador de un coche o el nivel de zoom de un visor. |
| Direction2D | Movimiento direccional 2D como la rotación de la cámara o el movimiento estándar del personaje de Roblox. |
| Direction3D | Movimiento direccional 3D como un vehículo en el aire que puede levitar arriba/abajo, acelerar/desacelerar y deslizarse a la izquierda/derecha. |
| ViewportPosition | Coordenadas 2D del viewport como la entrada del mouse, como para cursores personalizados o raycasting para seleccionar objetos en el mundo. |
Para probar un InputAction para una simple carrera de personaje:
Crea un nuevo InputAction dentro del contexto PlayContext en ReplicatedStorage. Renómbralo a CharacterSprint para indicar su acción dedicada.

En la ventana de Propiedades, observa que el Type de la acción es Bool (predeterminado). Este es un tipo lógico para una simple carrera de personaje como una acción booleana true/false (el personaje está corriendo o no está corriendo).

Enlaces de entrada
Un InputBinding define qué enlace de hardware debería activar la acción InputAction principal, por ejemplo, una pulsación de tecla, un botón de gamepad o un toque en un dispositivo habilitado para táctil. Para la compatibilidad multiplataforma, cada InputAction debe tener un InputBinding para gamepad, teclado/rato y táctil como se ilustra aquí.

El Type asignado a la InputAction principal afecta directamente qué tipos generales de entrada (tecla/botón/tap, gatillo analógico, joystick, etc.) son válidos para las instancias de InputBinding hijas. A su vez, los valores enviados a los eventos conectados de la acción principal dependen del tipo de entrada elegido de un enlace. Consulta eventos de entrada para más detalles sobre la correlación entre tipos de acción, enlaces y valores de retorno.
Para conectar enlaces para la simple carrera de un personaje:
Inserta un nuevo InputBinding en la acción CharacterSprint y renómbralo a KeyboardBinding. Luego establece la propiedad KeyCode del enlace en LeftShift.


Para asegurar que el bloqueo del mouse Shift no interfiera con el enlace de la tecla, selecciona StarterPlayer en el Explorador y desactiva su EnableMouseLockOption en la ventana de Propiedades.


Inserta un segundo InputBinding en la acción CharacterSprint y renómbralo a GamepadBinding. Luego establece la propiedad KeyCode del enlace en ButtonY.


Dentro de un contenedor ScreenGui dentro de StarterGui, crea un botón en pantalla, renómbralo a SprintButton y posiciónalo/redimensiona según lo desees.


Inserta un tercer InputBinding en la acción CharacterSprint y renómbralo a TouchBinding. Luego, en la ventana de Propiedades, vincula la propiedad UIButton del enlace al botón SprintButton que creaste previamente dentro de StarterGui.


Eventos de entrada
La instancia InputAction tiene tres eventos incorporados para manejar la entrada del jugador proveniente de InputBindings.
- StateChanged — Este evento se activa para todos los tipos de acción de entrada siempre que el estado cambie, excepto si el estado intenta transitar al mismo estado.
Dependiendo del Type de la acción de entrada (Bool, Direction1D, Direction2D, Direction3D, o ViewportPosition) y del tipo de entrada general proveniente de un InputBinding hijo (tecla/botón/tap, gatillo analógico, joystick, etc.), se devuelven diferentes valores a los manejadores de eventos Pressed, Released y StateChanged. Examina las siguientes tablas para entender mejor la correlación.
El tipo Bool es mejor para acciones desencadenadas como saltos, disparos, carreras, etc., con soporte para umbrales de presionado/liberado en entradas analógicas.
| Tipos de Entrada Válidos en InputBindings | Devuelto a la(s) Evento(s) InputAction |
|---|---|
| Entradas booleanas provenientes de teclas de teclado o botones básicos de mouse/gamepad a través de la propiedad KeyCode del enlace, o la pulsación/liberación de un GuiButton a través de la propiedad UIButton del enlace. |
|
| Cantidades variables de entrada provenientes de entradas analógicas como gatillos de gamepad (ButtonL2/ButtonR2) a través de la propiedad KeyCode del enlace. |
|
Para conectar eventos para la carrera simple de un personaje:
Inserta un nuevo Script en el árbol de CharacterSprint, junto a los varios enlaces de entrada. Luego establece su RunContext a Client y renómbralo a OnActivate.

Pega el siguiente código en el script OnActivate. Nota la conexión del evento Pressed en las líneas 13‑15, que duplica la velocidad de caminar del personaje cuando se presiona un enlace de entrada para sprintar, y la conexión del evento correspondiente Released en las líneas 16‑18, que restablece la velocidad de caminar al valor predeterminado cuando se libera un enlace de entrada para sprintar.
OnActivate (Script del Cliente)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)Prueba tu juego y prueba la acción de carrera del personaje con los enlaces que elegiste anteriormente: LeftShift para el teclado, ButtonY para el gamepad y el botón en pantalla SprintButton para dispositivos habilitados para tacto. Recuerda que puedes usar el Emulador de Controlador para probar entradas de gamepad directamente en Roblox Studio.
Cambios de contexto
Una vez que tienes un contexto de entrada como PlayContext, puedes habilitar/deshabilitar durante la jugabilidad a través de scripts, cambiar su Priority para determinar qué acciones tienen precedencia sobre otras, y Sink entradas para que no sean procesadas dentro de contextos de menor prioridad.
Para facilitar el cambio de contextos desde otros scripts, inserta un nuevo BindableEvent en tu carpeta de entradas dentro de ReplicatedStorage y renómbralo a ContextEvent.

Crea un nuevo Script al mismo nivel, establece su RunContext a Client, y renómbralo a UpdateContext.

Dentro del script UpdateContext, pega el siguiente código:
UpdateContext (Script del Cliente)local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")-- Conectar evento vinculablecontextEvent.Event:Connect(function(targetContext, enabled)local context = inputsFolder:FindFirstChild(targetContext)if context thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("¡Contexto de entrada no encontrado!")endend)Con el script UpdateContext en su lugar, ahora puedes actualizar un InputContext nombrado disparando el evento vinculable, por ejemplo, desde un LocalScript que potencia un GuiButton dentro de un contenedor ScreenGui.
Script del Botónlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- Disparar evento vinculable con contexto de entrada objetivo y estado habilitadocontextEvent:Fire("PlayContext", true)end)
Enlaces predeterminados
Roblox proporciona asignaciones de entrada predeterminadas para movimiento, control de cámara e interacción básica con el entorno — Los jugadores de Roblox están familiarizados con estos controles, por lo que solo debes sobrescribirlos en casos específicos. También ten en cuenta que las entradas reservadas no pueden ser sobrescritas y siempre funcionarán con su propósito previsto.
| Acción | Ratón/Teclado | Gamepad | Toque |
|---|---|---|---|
| Abrir menú de Roblox | Esc | Start botón (ButtonStart) | N/A |
| Consola del Desarrollador | F9 | N/A | N/A |
| Modo de pantalla completa (Windows) Mostrar escritorio (Mac) | F11 | N/A | N/A |
| Grabar video (Windows) | F12 | N/A | N/A |
| Tomar captura de pantalla | PrintScreen | N/A | N/A |