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 las acciones le da a los usuarios un control mucho mejor y más intuitivo sobre las funciones de su experiencia.En este tutorial, vincularás una acción de recarga a una claveespecífica.

Empezar

Este tutorial usa la herramienta Blaster creada en Crear herramientas para jugadores.Puede seguir esas instrucciones para crear la herramienta o puede descargar el modelo Blaster y insertarlo en StarterPack .

Los modelos se pueden agregar a tu inventario para usarlos entre cualquier experiencia. Para agregar un modelo a tu experiencia:

  1. En un navegador, abra la página del modelo modelo, haga clic en el botón Obtener . Esto agrega el modelo a su inventario.
  2. En Studio, vaya a la pestaña Ver y haga clic en la caja de herramientas .
  3. En la ventana de la caja de herramientas, haga clic en el botón Inventario . A continuación, asegúrese de que el desplegable esté en Mis modelos .
  4. Seleccione el modelo Blaster para agregarlo a la experiencia.

Crear un manipulador de acciones

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

  1. Abre el Controlador de herramientas dentro del Blaster.

  2. Haz 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 recibe tres argumentos: actionName, inputState y inputObject.Esta será la función que se ejecuta cuando se detecta 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, compruebe que el dado actionName coincide con el nombre de la acción de recarga y asegúrese de que inputState (el estado inicial) sea UserInputState.Begin (el estado inicial).Esto es importante porque la función se ejecutará cada vez que cambie inputState , pero la recarga solo debe ocurrir una vez.


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. Para hacer que sea obvio cuando el usuario recargue, cambie el TextureId de la herramienta a "rbxassetid://6593020923" por un momento, y luego cambiélo de vuelta 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 para manejar la acción (también llamada "devolución de llamada")
  • Si debe o no mostrarse un botón táctil
  • Cualquier cantidad de Enum.KeyCodes para detectar y asociar con la acción.

Los códigos de tecla son valores que representan diferentes botones de entrada, como teclas de teclado o botones de controlador.Una lista completa de códigos está disponible here .

  1. Obtenga 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 por los siguientes argumentos:

    • El nombre de la acción ( RELOAD_ACTION )
    • El manipulador de acciones ( onAction )
    • Un valor para crear un botón táctil ( true )
    • Una presió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 icono de la mochila debería cambiar momentáneamente a un símbolo de espera para señalar que la arma se está recargando:

Desvincular la acción

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

  1. Crea una nueva función llamada toolUnequipped y llama UnbindAction , pasando por 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 a el evento Unequipped para que la función se ejecute cuando se active 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 para confirmar que todo funcione correctamente. Deberías ser capaz de recargar cuando la herramienta esté equipada, pero no cuando esté desequipada.

Su animación de recarga ahora está completa - para un desafío adicional, prueba contar un contador de munición cada vez que se dispara el láser.Luego puedes desactivar la función toolActivated cuando la arma no tenga munición, luego reactivarla una vez que la animación de recarga se haya terminado.