Detectando a 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 às ações oferece aos usuários muito melhor e mais intuitivo controle sobre os recursos de sua experiência. Neste Tutorial, você vai vincular uma ação de recarregamento a uma chave específica.

Começando

Este tutorial usa a ferramenta Blaster criada em Criando Ferramentas de Jogador. Você pode seguir essas instruções para criar a ferramenta ou você pode baixar o modelo Blaster e inseri-lo em 2> StarterPack2>.

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

  1. In um navegador, abra a página modelo, clique no botão Obter . Isso adiciona o modelo ao seu inventário.
  2. In Studio, go to the Ver. tab and click on the Caixa de Ferramentas. .
  3. Na janela da Caixa de Ferramentas, clique no botão Inventário . Em seguida, certifique-se de que a lista suspensa esteja em Meus Modelos .
  4. Selecione o modelo Blaster para adicioná-lo à experiência.

Criando um Controlador de Ação

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

  1. Abra o ToolController LocalScript dentro do Blaster.

  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. Essa será a função que será executada quando o usuário entrar.


    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 recarregamento e certifique-se de que inputState está em UserInputState.Begin (o estado de início). Isso é importante porque a função será executada sempre que o 2> inputState2> muda, mas a recarregagem só precisa ser executada uma vez


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

Vinculando a Ação

ContextActionService pode ser usado para vincular uma função a um input específico usando a função Class.ContextActionService:BindAction()|BindAction , que aceita vários argumentos:

  • O nome da ação
  • A função para lidar com a ação (também chamada de " retorno de chamada")
  • Se um botão de toque deve ser exibido ou não
  • Qualquer quantidade de Enum.KeyCodes para detectar e associar com a ação.

Códigos de chave são valores que representam diferentes botões de entrada, como teclas do teclado ou botões do controlador. Uma lista completa de códigos está disponível em here .

  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 pelos seguintes argumentos:

    • O nome da ação ( RELOAD_ACTION )
    • O gerenciador de ações ( onAction )
    • Um valor para criar um botão de toque ( true )
    • Uma pressão 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. Teste de jogo equipando a ferramenta e pressionando a tecla R no seu teclado. O ícone de mochila deve mudar momentaneamente para um símbolo de espera para sinalizar que a arma está recarregando:

Desвяzando a Ação

Quando o usuário desequipar a ferramenta, a ação precisa ser desequipar para que eles não possam recarregar sem a ferramenta estando equipada.

  1. Crie uma nova função chamada toolUnequipped e chame UnbindAction, passando pelo 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 à função 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. Testar o jogo para confirmar que tudo está funcionando corretamente. Você deve ser capaz de recarregar quando a ferramenta estiver equipada, mas não quando ela não estiver equipada.

Sua animação de recarregamento está agora completa - para um desafio extra, tente contar um contador de munição a cada vez que o blaster é disparado. Você pode então desativar a função toolActivated quando a animação de recarregamento terminar.