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:
- En un navegador, abre la página del modelo, haz clic en el botón Obtener. Esto agrega el modelo a tu inventario.
- 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.
- Asegúrate de que el menú desplegable esté en Mis Modelos.
- 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.
Abre el LocalScript de ToolController dentro del Blaster.

Crea una variable para almacenar un nombre para la acción.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function toolEquipped()tool.Handle.Equip:Play()endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)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.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endDentro 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 thenendendPara 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 thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endend
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í.
Obtén ContextActionService en la parte superior del script.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"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 thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endPrueba 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.
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()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)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.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Unequipped:Connect(toolUnequipped)tool.Activated:Connect(toolActivated)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.