Connettere l'input dell'utente alle azioni fornisce agli utenti un controllo molto migliore e più intuitivo sulle funzionalità della tua esperienza.In questo Tutoriale, leggerai un'azione di ricarica a una chiave specifica.
Inizia
Questo tutorial utilizza lo strumento Blaster creato in Crea strumenti del giocatore .Puoi seguire quelle istruzioni per creare lo strumento o puoi scaricare il modello Blaster e inserirlo in StarterPack .
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, clicca il pulsante Ottieni . Questo aggiunge il modello nel tuo Inventario, reportorio.
- In Studio, vai alla scheda Visualizza e clicca sulla Toolbox .
- Nella finestra Toolbox, fai clic sul pulsante Inventario . Quindi, assicurati che il menu a discesa sia su I miei modelli .
- Seleziona il modello Blaster per aggiungerlo all'esperienza.
Crea un handler di azione
Prima, avrai bisogno di una funzione per gestire quando viene rilevata l'input dell'utente.
Apri il ToolController dentro al Blaster.
Crea 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 rilevata 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 dato actionName corrisponda al nome dell'azione di ricarica e assicurati che inputState (lo stato iniziale) sia UserInputState.Begin (lo stato iniziale).Questo è importante perché la funzione verrà eseguita ogni volta che verranno effettuate le modifiche inputState , ma il ricaricamento deve avvenire solo 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 del tool in "rbxassetid://6593020923" per un momento, e poi cambialo nuovamente al suo valore originale di "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
Lega l'azione
ContextActionService può essere utilizzato per legare 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")
- Se un pulsante touchscreen debba essere visualizzato o meno
- Qualsiasi importo di Enum.KeyCodes per rilevare e associare all'azione.
I codici chiave sono valori che rappresentano diversi pulsanti di input, come le tastiere o i pulsanti del controller.Una lista completa di codici è disponibile here .
Ottieni ContextActionService in cima allo 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 delle azioni ( onAction )
- Un valore per creare un pulsante di tocco ( true )
- Un tocco di tastiera 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()endPlaytest equipaggiando lo strumento e premendo il tasto R sulla tua tastiera.L'icona dello zaino dovrebbe cambiare momentaneamente in un simbolo di attesa per segnalare che l'arma si sta ricaricando:
Dislega l'azione
Quando l'utente disequipa lo strumento, l'azione deve essere disconnessa 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)Collega la funzione toolUnequipped alla funzione Unequipped dell'evento in modo che la funzione venga eseguita quando l'evento si attiva.
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)Playtest per confermare che tutto funziona correttamente. Dovresti essere in grado di ricaricare quando lo strumento è equipaggiato, ma non quando è disequipaggiato.
La tua animazione di ricarica è ora completa - per una sfida extra, prova a contare a ritroso un contapallotto ogni volta che il blaster viene sparato.Puoi quindi disattivare la funzione toolActivated quando l'arma non ha munizioni, quindi riattivarla una volta che l'animazione di ricarica è finita.