Tutoriais intermediários

Detectar entrada do usuário

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Conectar a entrada do usuário a ações oferece um controle muito melhor e mais intuitivo sobre os recursos da sua experiência. Neste tutorial, você irá vincular uma ação de recarregar a uma tecla específica.

Começando

Este tutorial usa a ferramenta Blaster criada em Criar Ferramentas para Jogadores. Você pode seguir essas instruções para criar a ferramenta ou pode baixar o modelo Blaster e inseri-lo no StarterPack.

Os modelos podem ser adicionados ao seu Inventário para serem usados entre qualquer experiência. Para adicionar um modelo à sua experiência:

  1. Em um navegador, abra a página do modelo, clique no botão Obter. Isso adiciona o modelo ao seu inventário.
  2. No menu Janela do Studio ou na barra de ferramentas da aba Inicio, abra a Caixa de Ferramentas e selecione a aba Inventário.
  3. Certifique-se de que o dropdown esteja em Meus Modelos.
  4. Selecione o modelo Blaster para adicioná-lo à experiência.

Criar um manipulador de ação

Primeiro, você precisará de uma função para lidar quando a entrada do usuário for detectada.

  1. Abra o LocalScript ToolController dentro do Blaster.

    Visão do Explorer onde o script ToolController dentro da ferramenta Blaster está selecionado

  2. Crie uma variável para armazenar um nome para a ação.


    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. 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.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. Dentro da função, verifique se o actionName dado corresponde ao nome da ação de recarregar e assegure-se de que o inputState seja UserInputState.Begin (o estado inicial). Isso é importante porque a função será executada toda vez que o inputState mudar, mas o recarregar só precisa acontecer uma vez.


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. Para deixar óbvio quando o usuário recarrega, mude o TextureId da ferramenta para "rbxassetid://6593020923" por um momento, e depois mude de volta para seu 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

Vínculo da 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 ao toque deve ser exibido ou não.
  • Qualquer quantidade de Enum.KeyCodes para detectar e associar com a 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.

  1. Obtenha ContextActionService no topo do script.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. 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 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. Faça um teste jogando ao equipar 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 desequipa a ferramenta, a ação precisa ser desvinculada para que ele não possa recarregar sem a ferramenta estar equipada.

  1. 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()
    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. Conecte a função toolUnequipped ao evento Unequipped para que a função seja executada quando o evento for disparado.


    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. Faça um teste para confirmar que tudo funciona corretamente. Você deve ser capaz de recarregar quando a ferramenta estiver equipada, mas não quando estiver desequipada.

Sua animação de recarga está agora completa - para um desafio extra, tente contar um contador de munição toda 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 finalizada.

©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.