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 proporciona a los usuarios un control mucho mejor y más intuitivo sobre las características de tu juego. 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 para jugadores. Puedes seguir esas instrucciones para crear la herramienta o puedes descargar el modelo Blaster e insertarlo en StarterPack.

Los modelos se pueden agregar a tu Inventario para ser utilizados entre cualquier juego. Para agregar un modelo a tu juego:

  1. En un navegador, abre la página del modelo, haz clic en el botón Obtener. Esto agrega 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 menú desplegable esté en Mis Modelos.
  4. Selecciona el modelo Blaster para agregarlo al juego.

Crear un manejador de acciones

Primero, necesitarás una función para manejar cuando se detecta 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 el inputState, pero la recarga solo necesita ocurrir una vez.

    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. Para que sea 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 utilizando la función BindAction, que acepta varios argumentos:

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

KeyCodes son valores que representan diferentes botones de entrada, como teclas de teclado o botones de controladores. 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 manejador de la acción (onAction)
    • Un valor para crear un botón táctil (true)
    • Una pulsación de 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 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 se está recargando:

Desvincular la acción

Cuando el usuario desequipa la herramienta, la acción necesita ser desvinculada para que no pueda 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 se dispare el evento.

    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 el juego para confirmar que todo funciona 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 adicional, intenta contar un contador de munición cada vez que se dispare el blaster. Luego puedes desactivar la función toolActivated cuando la pistola no tenga munición 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.