Sistema de Acción de Entrada

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

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.

  1. RECOMENDADO
    Crea una Folder llamada Inputs dentro de ReplicatedStorage para contener varios contextos de entrada.

    Nueva carpeta dentro de ReplicatedStorage, renombrada a Inputs
  2. Inserta un nuevo InputContext en la carpeta y renómbralo a PlayContext.

    Nueva instancia de InputContext dentro de ReplicatedStorage, renombrada a PlayContext
  3. 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 EntradaEjemplo de Uso
BoolAcciones desencadenadas como saltar, disparar, correr, etc., con soporte para umbrales de presionado/liberado en entradas analógicas.
Direction1DAcciones variables de cero a pleno como el pedal del acelerador de un coche o el nivel de zoom de un visor.
Direction2DMovimiento direccional 2D como la rotación de la cámara o el movimiento estándar del personaje de Roblox.
Direction3DMovimiento direccional 3D como un vehículo en el aire que puede levitar arriba/abajo, acelerar/desacelerar y deslizarse a la izquierda/derecha.
ViewportPositionCoordenadas 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:

  1. Crea un nuevo InputAction dentro del contexto PlayContext en ReplicatedStorage. Renómbralo a CharacterSprint para indicar su acción dedicada.

    Nueva instancia de InputAction dentro de un InputContext, renombrada a CharacterSprint
  2. 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).

    Propiedad Type de un InputAction configurada a Bool

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:

  1. Inserta un nuevo InputBinding en la acción CharacterSprint y renómbralo a KeyboardBinding. Luego establece la propiedad KeyCode del enlace en LeftShift.

  2. 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.

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

  4. 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.

  5. 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.

  • Pressed — Este evento se activa solo cuando el Type de la acción de entrada está configurado a Bool, y solo cuando el estado cambia de false a true.
  • Released — Este evento se activa solo cuando el Type de la acción de entrada está configurado a Bool, y solo cuando el estado cambia de true a false.
  • 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 InputBindingsDevuelto 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:

  1. 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.

  2. Pega el siguiente código en el script OnActivate. Nota la conexión del evento Pressed en las líneas 1315, 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 1618, 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.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
  3. 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.

  1. 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.

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

  3. 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 vinculable
    contextEvent.Event:Connect(function(targetContext, enabled)
    local context = inputsFolder:FindFirstChild(targetContext)
    if context then
    context.Enabled = enabled
    print(context.Name .. ": " .. tostring(context.Enabled))
    else
    warn("¡Contexto de entrada no encontrado!")
    end
    end)
  4. 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ón

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    local button = script.Parent
    button.Activated:Connect(function()
    -- Disparar evento vinculable con contexto de entrada objetivo y estado habilitado
    contextEvent: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ónRatón/TecladoGamepadToque
Abrir menú de RobloxEscStart botón (ButtonStart)N/A
Consola del DesarrolladorF9N/AN/A
Modo de pantalla completa (Windows)
Mostrar escritorio (Mac)
F11N/AN/A
Grabar video (Windows)F12N/AN/A
Tomar captura de pantallaPrintScreenN/AN/A
©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.