Conectar la entrada del usuario a las acciones le da a los usuarios mucho 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 claveespecífica.
Comenzando
Este tutorial usa la herramienta Blaster creada en Creando Herramientas de Jugador. Puede seguir estas instrucciones para crear la herramienta o puede descargar el modelo Blaster y insertarlo en 2> StarterPack2> .
Los modelos se pueden agregar a su inventario para usar entre cualquier experiencia. Para agregar un modelo a su experiencia:
- En un navegador, abra la página de modelo, haga clic en el botón de Obtener, y esto agrega el modelo a su inventario.
- En Studio, ve a la pestaña Ver y haz clic en la Caja de herramientas.
- En la ventana de la caja de herramientas, haz clic en el botón Inventario . Luego, asegúrate de que el menú desplegable esté en Mis modelos .
- Seleccione el modelo Blaster para agregarlo a la experiencia.
Creando un Controlador de Acción
Primero, necesitarás una función para manejar cuando se detecte la entrada del usuario.
Abre el ToolController LocalScript dentro del Blaster.
Haga 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 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.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endDentro de la función, compruebe que el dado actionName coincida con el nombre de la acción de recarga y asegúrese de que inputState esté UserInputState.Begin (el estado de inicio). Esto es importante porque la función se ejecutará cada vez que el estado de inicio cambie, pero la recarga solo se necesitará una vez.
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendPara hacerlo obvio cuando el usuario recarga, cambia el TextureId del tool to "rbxassetid://6593020923" for a moment, and then cambiarlo back to its original value of "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
Vinculando la acción
ContextActionService se puede usar para vincular una función a un input específico usando la función Class.ContextActionService:BindAction()|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 de pantalla táctil
- Cualquier cantidad de Enum.KeyCodes para detectar y asociar con la acción.
Los códigos clave son valores que representan diferentes botones de entrada, como teclas del teclado o botones del controlador. Un listado completo de códigos está disponible here .
Obtener 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 a través de los siguientes argumentos:
- El nombre de la acción ( RELOAD_ACTION )
- El gestor 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 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()endPruebe el juego equipando la herramienta y presionando la tecla R en su teclado. El icono de la mochila debería cambiar momentáneamente a un símbolo de espera para señalar que el arma se está recargando:
Desвяzado de la acción
Cuando el usuario desequipa la herramienta, la acción debe ser desvincular para que no pueda recargar sin que la herramienta esté equipada.
Crea una nueva función llamada toolUnequipped y llama UnbindAction , pasando a través del 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 a el evento Unequipped para que la función se ejecute cuando el evento se activa.
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)Probar el juego para confirmar que todo funciona correctamente. Deberías poder recargar cuando el instrumento esté equipado, pero no cuando esté desequipado.
Su animación de recarga ahora está completa - para un desafío adicional, intente contar un contador de munición cada vez que se dispare el blaster. Luego puede desactivar la función toolActivated cuando la arma no tiene munición, luego reactivarla una vez que la animación de recarga se haya terminado.