Tutoriales intermedios

Detectar la entrada del usuario

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

Conectar la entrada del usuario a acciones le da a los usuarios un mejor y más intuitivo control sobre las características de tu experiencia. En este tutorial, vincularás una acción de recarga a una tecla específica.

Comenzar

Este tutorial utiliza la herramienta Blaster creada en Crear herramientas de jugador. Puedes seguir esas instrucciones para crear la herramienta o puedes descargar el modelo Blaster e insertarlo en StarterPack.

Los modelos pueden ser añadidos a tu Inventario para ser usados entre cualquier experiencia. Para añadir un modelo a tu experiencia:

  1. En un navegador, abre la página del modelo, haz clic en el botón Obtener. Esto añade el modelo a tu inventario.
  2. Desde el menú Ventana de Studio o la barra de herramientas de la pestaña Inicio, abre el Toolbox y selecciona la pestaña Inventario.
  3. Asegúrate de que el desplegable esté en Mis Modelos.
  4. Selecciona el modelo Blaster para añadirlo a la experiencia.

Crear un controlador de acción

Primero, necesitarás una función para manejar cuando se detecte la entrada del usuario.

  1. Abre el LocalScript de ToolController dentro del Blaster.

    Vista del Explorador donde se selecciona el script ToolController dentro de la herramienta Blaster

  2. Crea una variable para almacenar un nombre para la acción.


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  3. Crea una función llamada onAction que reciba tres argumentos: actionName, inputState, y inputObject. Esta será la función que se ejecute cuando se detecte la entrada del usuario.


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. Dentro de la función, verifica que el actionName dado coincida con el nombre de la acción de recarga y asegúrate de que inputState sea UserInputState.Begin (el estado inicial). Esto es importante porque la función se ejecutará cada vez que cambie inputState, pero la recarga solo necesita suceder una vez.


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. Para hacer obvio cuando el usuario recarga, cambia el TextureId de la herramienta a "rbxassetid://6593020923" por un momento, y luego cámbialo de nuevo a su valor original de "rbxassetid://92628145".


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end

Vincular la acción

ContextActionService se puede usar para vincular una función a una entrada específica usando la función BindAction, que acepta varios argumentos:

  • El nombre de la acción.
  • La función que maneja la acción (también llamada "callback").
  • Si se debe mostrar un botón de pantalla táctil o no.
  • Cualquier cantidad de Enum.KeyCodes para detectar y asociar con la acción.

KeyCodes son valores que representan diferentes botones de entrada, como teclas del teclado o botones del controlador. Una lista completa de códigos está disponible aquí.

  1. Obtén ContextActionService en la parte superior del script.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. Dentro de la función toolEquipped, llama a BindAction y pasa los siguientes argumentos:

    • El nombre de la acción (RELOAD_ACTION)
    • El controlador de acción (onAction)
    • Un valor para crear un botón táctil (true)
    • Una tecla para detectar (Enum.KeyCode.R)

    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
  3. Prueba ejecutando el juego equipando la herramienta y presionando la tecla R en tu teclado. El ícono de la mochila debería cambiar momentáneamente a un símbolo de espera para señalar que el arma está recargando:

Desvincular la acción

Cuando el usuario se quita la herramienta, la acción necesita ser desvinculada para que no puedan recargar sin que la herramienta esté equipada.

  1. Crea una nueva función llamada toolUnequipped y llama a UnbindAction, pasando el nombre de la acción.


    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  2. Conecta la función toolUnequipped al evento Unequipped para que la función se ejecute cuando el evento se inicie.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Unequipped:Connect(toolUnequipped)
    tool.Activated:Connect(toolActivated)
  3. Prueba jugando para confirmar que todo funcione correctamente. Deberías poder recargar cuando la herramienta esté equipada, pero no cuando esté desequipada.

Tu animación de recarga ahora está completa; para un desafío extra, intenta contar un contador de municiones cada vez que se dispare el blaster. Luego, puedes desactivar la función toolActivated cuando la pistola no tenga municiones, y reactivarla una vez que la animación de recarga haya terminado.

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