Connettere l'input dell'utente alle azioni dà agli utenti un controllo molto migliore e più intuitivo delle funzionalità della tua esperienza. In questo Tutoriale, leggerai un'azione di ricarica a una chiave specifica.
Per iniziare
Questo tutorial usa lo strumento Blaster creato in Creating Player Tools. Puoi seguire queste istruzioni per creare lo strumento o puoi scaricare il modello Blaster e inserirlo in 2> StarterPack2>.
I modelli possono essere aggiunti al tuo inventario per essere utilizzati tra qualsiasi esperienza. Per aggiungere un modello alla tua esperienza:
- In un browser, apri la pagina modello, fai clic sul pulsante Ottieni. Questo aggiunge il modello nel tuo Inventario, reportorio.
- Nello Studio, vai alla scheda Visualizza e fai clic sulla Toolbox .
- Nella finestra InToolbox, fai clic sul pulsante Inventario . Quindi, assicurati che il menu a discesa sia selezionato I miei modelli .
- Seleziona il Blaster modello per aggiungerlo all'esperienza.
Creazione di un Action Handler
In primo luogo, avrai bisogno di una funzione per gestire quando viene rilevato l'input dell'utente.
Apri il ToolController LocalScript all'interno del Blaster.
Fai una variabile per memorizzare un nome per l'azione.
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)Crea una funzione chiamata onAction che riceve tre argomenti: actionName , inputState e inputObject . Questa sarà la funzione che viene eseguita quando viene rilevato l'input dell'utente.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endAll'interno della funzione, controlla che il actionName dato corrisponda al nome dell'azione di ricarica e assicurati che inputState sia UserInputState.Begin (lo stato di avvio). Questo è importante poiché la funzione viene eseguita ogni volta che il 2>inputState2> cambia, ma il ricarica solo deve avvenire una volta.
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendPer rendere evidente quando l'utente ricarica, cambia il TextureId della tool to "rbxassetid://6593020923" for a moment, and then change it back to its original value of "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
associare l'azione
ContextActionService può essere utilizzato per associare una funzione a un input specifico utilizzando la funzione BindAction, che accetta diversi argomenti:
- Il nome dell'azione
- La funzione per gestire l'azione (anche chiamata " Richiama")
- Indipendentemente dal fatto che un pulsante della schermata di tocco debba essere mostrato o meno
- Qualsiasi quantità di Enum.KeyCodes per rilevare e associare all'azione.
I KeyCodes sono valori che rappresentano diversi pulsanti di input, come le chiavi di tastiera o i pulsanti del controller. Un elenco completo di codici è disponibile here .
Ottieni ContextActionService nella parte superiore dello script.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"All'interno della funzione toolEquipped, chiama BindAction e passa attraverso i seguenti argomenti:
- Il nome dell'azione ( RELOAD_ACTION )
- Il gestore di azione ( onAction )
- Un valore per creare un pulsante di touch ( true )
- Un pulsante chiave per rilevare ( 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()endProva di gioco equipaggiando lo strumento e premendo il R pulsante sul tuo tastierino. L'icona dello zaino dovrebbe cambiare istantaneamente in un simbolo di attesa per segnalare che l'arma si sta ricaricando:
Slegatura dell'azione
Quando l'utente disequipaggia lo strumento, l'azione deve essere unbound in modo che non possa ricaricare senza che lo strumento sia equipaggiato.
Crea una nuova funzione chiamata toolUnequipped e chiama UnbindAction , passando attraverso il nome dell'azione.
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)Connetti la funzione toolUnequipped alla funzione Unequipped in modo che la funzione venga eseguita quando si attiva l'evento.
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)Prova del gioco per confermare che tutto funzioni correttamente. Dovresti essere in grado di ricaricare quando lo strumento è equipaggiato, ma non quando non è equipaggiato.
La tua animazione di ricarica è ora completa - per una sfida extra, prova a contare il contatore di munizioni ogni volta che il blaster viene sparato. Puoi quindi disattivare la funzione toolActivated quando il blaster non ha munizioni, quindi riattivarlo una volta terminata l'animazione di ricarica.