Conectar a entrada do usuário a ações dá aos usuários um controle muito melhor e mais intuitivo sobre os recursos do seu jogo. Neste tutorial, você irá vincular uma ação de recarga a uma tecla específica.
Começando
Este tutorial usa a ferramenta Blaster criada em Criar Ferramentas de Jogador. Você pode seguir essas instruções para criar a ferramenta ou pode baixar o modelo Blaster e inseri-lo no StarterPack.
Modelos podem ser adicionados ao seu Inventário para serem usados entre qualquer jogo. Para adicionar um modelo ao seu jogo:
- Em um navegador, abra a página do modelo, clique no botão Obter. Isso adiciona o modelo ao seu inventário.
- No menu Janela do Studio ou na barra de ferramentas da aba Início, abra a Caixa de Ferramentas e selecione a aba Inventário.
- Certifique-se de que o dropdown esteja em Meus Modelos.
- Selecione o modelo Blaster para adicioná-lo ao jogo.
Criar um manipulador de ação
Primeiro, você precisará de uma função para lidar quando a entrada do usuário for detectada.
Abra o LocalScript ToolController dentro do Blaster.

Crie uma variável para armazenar um nome para a ação.
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)Crie uma função chamada onAction que recebe três argumentos: actionName, inputState e inputObject. Esta será a função que será executada quando a entrada do usuário for detectada.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endDentro da função, verifique se o actionName fornecido corresponde ao nome da ação de recarga e certifique-se de que inputState seja UserInputState.Begin (o estado inicial). Isso é importante porque a função será executada toda vez que o inputState mudar, mas a recarga só precisa acontecer uma vez.
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendPara deixar óbvio quando o usuário recarrega, mude o TextureId da ferramenta para "rbxassetid://6593020923" por um momento e, em seguida, mude-o de volta para seu 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 a ação
ContextActionService pode ser usado para vincular uma função a uma entrada específica usando a função BindAction, que aceita vários argumentos:
- O nome da ação.
- A função para lidar com a ação (também chamada de "callback").
- Se um botão de tela sensível deve ser exibido ou não.
- Qualquer quantidade de Enum.KeyCodes para detectar e associar à ação.
KeyCodes são valores que representam diferentes botões de entrada, como teclas de teclado ou botões de controle. Uma lista completa de códigos está disponível aqui.
Obtenha ContextActionService no topo do script.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"Dentro da função toolEquipped, chame BindAction e passe os seguintes argumentos:
- O nome da ação (RELOAD_ACTION)
- O manipulador de ação (onAction)
- Um valor para criar um botão de toque (true)
- Uma 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()endTeste jogando, equipando a ferramenta e pressionando a tecla R no seu teclado. O ícone da mochila deve mudar momentaneamente para um símbolo de espera para sinalizar que a arma está recarregando:
Desvincular a ação
Quando o usuário remove a ferramenta, a ação precisa ser desvinculada para que ele não possa recarregar sem a ferramenta estar equipada.
Crie uma nova função chamada toolUnequipped e chame UnbindAction, passando o nome da ação.
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)Conecte a função toolUnequipped ao evento Unequipped para que a função seja executada quando o evento for acionado.
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)Teste jogando para confirmar que tudo funciona corretamente. Você deve ser capaz de recarregar quando a ferramenta estiver equipada, mas não quando estiver removida.
Sua animação de recarga agora está completa - para um desafio extra, tente contar um contador de munição cada vez que o blaster for disparado. Você pode então desativar a função toolActivated quando a arma não tiver munição e reativá-la uma vez que a animação de recarga estiver concluída.