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

Comece

Este tutorial usa a ferramenta Blaster criada em Criar Ferramentas do 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 experiência. Para adicionar um modelo à sua experiência:

  1. Em um navegador, abra a página do modelo modelo, clique no botão Obter . Isso adiciona o modelo ao seu inventário.
  2. No Studio, vá para a aba Ver e clique na Caixa de Ferramentas .
  3. Na janela da Caixa de Ferramentas, clique no botão Inventário . Em seguida, certifique-se de que o menu suspenso está em Meus Modelos .
  4. Selecione o modelo Blaster para adicioná-lo à experiência.

Crie 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 Controlador de Ferramentas 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.Esta será a função que será executada quando o input do usuário for detectado.


    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 dado actionName corresponde ao nome da ação de recarregamento e garanta que inputState seja UserInputState.Begin (o estado inicial).Isso é importante porque a função será executada sempre que as alterações de inputState mudarem, mas a recarga 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 tornar óbvio quando o usuário recarrega, altere o TextureId do instrumento para "rbxassetid://6593020923" por um momento e depois volte ao 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

Vincule a ação

ContextActionService pode ser usado para ligar 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 "retorno de chamada")
  • Se um botão de toque deve ou não ser exibido
  • Qualquer quantia de Enum.KeyCodes para detectar e associar à ação.

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

  1. Obtenha ContextActionService na parte superior 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 manipulador de ação ( 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 na sua tecla.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 eles não possam recarregar sem que a ferramenta seja 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 do evento 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. Teste de jogo para confirmar que tudo funciona corretamente. Você deve ser capaz de recarregar quando a ferramenta for equipada, mas não quando for desequipada.

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 tem munição, então reativá-la quando a animação de recarga terminar.