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:
- In um navegador, abra a página modelo, clique no botão Obter . Isso adiciona o modelo ao seu inventário.
- In Studio, go to the Ver. tab and click on the Caixa de Ferramentas. .
- 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 .
- 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.
Abra o ToolController LocalScript 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. Essa será a função que será executada quando o usuário entrar.
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 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 thenendendPara 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 thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endend
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 .
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 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 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 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.
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()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 à função Unequipped para que a função seja executada quando o evento for disparado.
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)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.