Il sistema di azioni di input cross-platform Input Action System ti consente di connettere azioni e organizzare binding attraverso vari input hardware in fase di modifica. Combinato con contesti, puoi facilmente configurare e modificare un sistema di input modulare che funziona su qualsiasi dispositivo in qualsiasi fase di gioco. I casi d'uso includono:
- Un sistema di sparatutto in prima persona con azioni che si scambiano dinamicamente a seconda che il giocatore sia in modalità battaglia o modalità spettatore.
- Un sistema di guida completo dotato di accelerazione/decelerazione, potenziamenti per auto e stazioni di rifornimento.
- Tasti di scelta rapida per un sistema di abilità in un gioco di combattimento per cambiare le mosse senza che i giocatori perdano un colpo.
Contesti di input
Un InputContext è una raccolta di azioni che contiene azioni di input correlate, ad esempio PlayContext per i controlli del personaggio in gioco e NavContext per i controlli per navigare nei menu dell'interfaccia utente. Puoi abilitare/disabilitare i contesti (e le loro azioni corrispondenti) attraverso la proprietà Enabled, ad esempio per abilitare il NavContext quando un menu di inventario è aperto e poi passare al PlayContext quando il giocatore chiude il menu e torna al gameplay principale.
Anche se un gioco potrebbe non utilizzare più contesti di input inizialmente, è consigliabile creare un contesto primario a livello superiore di qualsiasi sistema di input, ad esempio l'istanza PlayContext per l'input che si verifica durante il gameplay.
- RACCOMANDATOCrea una Folder chiamata Inputs all'interno di ReplicatedStorage per contenere vari contesti di input.

Inserisci un nuovo InputContext nella cartella e rinominalo in PlayContext.

- OPZIONALENella finestra Proprietà, imposta Priority a 2000 e abilita Sink. Un contesto con Sink abilitato consuma eventi di input per i suoi KeyCodes associati al suo livello di priorità, bloccando quegli input dal raggiungere contesti di priorità inferiore. Questo è pratico per casi d'uso come uno schermo di inventario che dovrebbe sopprimere specifici input di gioco mentre è aperto. In questo esempio, a PlayContext viene data una Priority sufficientemente alta per affondare i suoi input associati prima che i contesti predefiniti PlayerScripts li elaborino.

Azioni di input
Un InputAction definisce una meccanica di azione di gioco come "Salta", "Corri" o "Spara". Queste azioni vengono quindi mappate a input hardware utilizzando binding di input.
Un InputAction può essere di diverse variazioni a seconda della sua proprietà Type (Enum.InputActionType). Il valore predefinito è Bool, progettato per ricevere valori true/false dalla pressione/rilascio di input come ButtonA, E o MouseLeftButton.
| Tipo di Azione di Input | Esempio di Utilizzo |
|---|---|
| Bool | Azioni attivate come saltare, sparare, correre, ecc. con supporto per soglie di premuto/rilasciato su input analogici. |
| Direction1D | Azioni variabili da zero a pieno come il pedale dell'acceleratore di un'auto o il livello di zoom di un mirino. |
| Direction2D | Movimento direzionale 2D come la rotazione della telecamera o il movimento standard del personaggio di Roblox. |
| Direction3D | Movimento direzionale 3D come un veicolo aereo che può levitare su/giù, accelerare/decelerare e sbandare a sinistra/destra. |
| ViewportPosition | Coordinate 2D della viewport come input del mouse, ad esempio per cursori personalizzati o raycasting per selezionare oggetti nel mondo. |
Per testare un InputAction per la semplice corsa del personaggio:
- RACCOMANDATOSeleziona l'oggetto Workspace a livello superiore nell'Esplora e poi, nella finestra Proprietà, imposta la proprietà PlayerScriptsUseInputActionSystem su Enabled.
Crea un nuovo InputAction all'interno del contesto PlayContext in ReplicatedStorage. Rinominalo in CharacterSprint per indicare la sua azione dedicata.

Binding di input
Un InputBinding definisce quale binding hardware dovrebbe attivare il InputAction genitore, ad esempio una pressione di tasto, un pulsante del gamepad o un tocco su un dispositivo abilitato al tocco. Per la compatibilità cross-platform, ogni InputAction dovrebbe avere un InputBinding per gamepad, tastiera/mouse e touch come illustrato qui.

Roblox fornisce binding di input predefiniti per movimento, controllo della fotocamera e interazione di base con l'ambiente — I giocatori di Roblox sono familiari con questi controlli, quindi dovresti sovrascriverli solo in casi specifici. Nota anche che gli input riservati non possono essere sovrascritti e funzioneranno sempre con il loro scopo previsto.
| Azioni | Mouse/Tastiera | Gamepad | Touch |
|---|---|---|---|
| Apri menu Roblox | Esc | Start pulsante (ButtonStart) | N/A |
| Console Sviluppatore | F9 | N/A | N/A |
| Modalità a schermo intero (Windows) Mostra desktop (Mac) | F11 | N/A | N/A |
| Registra video (Windows) | F12 | N/A | N/A |
| Fai uno screenshot | PrintScreen | N/A | N/A |
Il Type assegnato al InputAction genitore influisce direttamente su quali tipi di input generali (tasto/pulsante/tocco, grilletto analogico, thumbstick, ecc.) sono validi per le istanze di InputBinding figlie. A sua volta, i valori inviati agli eventi connessi all'azione genitore dipendono dal tipo di input scelto per un binding. Vedi eventi di input per dettagli sulla correlazione tra tipi di azione, binding e valori di ritorno.
Per collegare i binding per la semplice corsa del personaggio:
Inserisci un nuovo InputBinding nell'azione CharacterSprint e rinominalo in KeyboardBinding. Quindi imposta la proprietà KeyCode del binding su LeftShift.


Inserisci un secondo InputBinding nell'azione CharacterSprint e rinominalo in GamepadBinding. Quindi imposta la proprietà KeyCode del binding su ButtonY.


All'interno di un contenitore ScreenGui all'interno di StarterGui, crea un pulsante sullo schermo, rinominalo in SprintButton e posizionalo/ridimensiona come desiderato.


Inserisci un terzo InputBinding nell'azione CharacterSprint e rinominalo in TouchBinding. Quindi, nella finestra Proprietà, collega la proprietà UIButton del binding al pulsante SprintButton che hai creato in precedenza all'interno di StarterGui.


Eventi di input
L'istanza InputAction ha tre eventi integrati per gestire l'input del giocatore proveniente da InputBindings.
- StateChanged — Questo evento si attiva per tutti i tipi di azione di input ogni volta che lo stato cambia, tranne se lo stato tenta di passare allo stesso stato.
A seconda del Type dell'azione di input (Bool, Direction1D, Direction2D, Direction3D, o ViewportPosition) e del tipo di input generale proveniente da un InputBinding figlio (tasto/pulsante/tocco, grilletto analogico, thumbstick, ecc.), valori diversi vengono restituiti ai gestori di eventi Pressed, Released, e StateChanged. Esamina le seguenti tabelle per comprendere meglio la correlazione.
Il tipo Bool è migliore per azioni attivate come saltare, sparare, correre, ecc. con supporto per soglie di premuto/rilasciato su input analogici.
| Tipi di Input Validi su InputBindings | Restituito all'Evento InputAction |
|---|---|
| Input booleani da tasti della tastiera o pulsanti di base del mouse/gamepad attraverso la proprietà KeyCode del binding, o una pressione/rilascio di GuiButton attraverso la proprietà UIButton del binding. |
|
| Quantità di input variabili da input analogici come i grilletto del gamepad (ButtonL2/ButtonR2) attraverso la proprietà KeyCode del binding. |
|
Per connettere eventi per la semplice corsa del personaggio:
Inserisci un nuovo Script nell'albero CharacterSprint, insieme ai vari binding di input. Quindi imposta il suo RunContext su Client e rinominalo in OnActivate.

Incolla il seguente codice nello script OnActivate. Nota la connessione dell'evento Pressed alle righe 13‑15 che raddoppia la velocità di camminata del personaggio quando un binding di input di corsa è premuto, e la corrispondente connessione dell'evento Released alle righe 16‑18 che ripristina la velocità di camminata predefinita quando un binding di input di corsa è rilasciato.
OnActivate (Client Script)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)Prova il tuo gioco e testa l'azione di corsa del personaggio con i binding che hai scelto in precedenza: LeftShift per la tastiera, ButtonY per il gamepad e il pulsante SprintButton sullo schermo per i dispositivi abilitati al tocco. Ricorda che puoi utilizzare l'Emulatore di Controller per testare gli input del gamepad direttamente in Roblox Studio.
Cambiamenti di contesto
Una volta che hai un contesto di input come PlayContext, puoi abilitarlo/disabilitarlo durante il gameplay tramite scripting, cambiare la sua Priority per determinare quali azioni hanno la precedenza su altre, e Sink input per non essere elaborati all'interno di contesti di priorità inferiore.
Per facilitare il passaggio tra contesti da altri script, inserisci un nuovo BindableEvent nella tua cartella di input all'interno di ReplicatedStorage e rinominalo in ContextEvent.

Crea un nuovo Script allo stesso livello, imposta il suo RunContext su Client, e rinominalo in UpdateContext.

All'interno dello script UpdateContext, incolla il seguente codice:
UpdateContext (Client Script)local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")-- Connetti l'evento bindablecontextEvent.Event:Connect(function(targetContext, enabled)local context = inputsFolder:FindFirstChild(targetContext)if context thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("InputContext non trovato!")endend)Con lo script UpdateContext in posizione, ora puoi aggiornare un InputContext nominato attivando l'evento bindable, ad esempio da un LocalScript che alimenta un GuiButton all'interno di un contenitore ScreenGui.
Script del Pulsantelocal ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- Attiva l'evento bindable con il contesto di input target e stato abilitatocontextEvent:Fire("PlayContext", true)end)
Gestore delle Azioni di Input
Il Gestore delle Azioni di Input è uno strumento unificato, un'interfaccia in stile matrice per progettare, controllare e scalare la tua architettura di input.
Per accedervi, naviga nel menu Finestra in Studio e seleziona Input ⟩ Gestore delle Azioni di Input. Se il tuo gioco utilizza già contesti, azioni o binding di input, il gestore scansionerà automaticamente il DataModel ed estrarrà quelle istanze esistenti nella griglia dell'editor. Qualsiasi nuova istanza relativa all'input verrà automaticamente popolata in una cartella Inputs all'interno di ReplicatedStorage.

Per configurare un'impostazione di input per corsa del personaggio come descritto nelle sezioni sopra:
- RACCOMANDATOSeleziona l'oggetto Workspace a livello superiore nell'Esplora e poi, nella finestra Proprietà, imposta la proprietà PlayerScriptsUseInputActionSystem su Enabled.
All'interno di un contenitore ScreenGui all'interno di StarterGui, crea un pulsante sullo schermo, rinominalo in SprintButton, e posizionalo/ridimensiona come desiderato.

Nel Gestore delle Azioni di Input, passa il mouse sopra l'intestazione della colonna Contesto e fai clic sul pulsante +. Inserisci un nome appropriato per il nuovo contesto come PlayContext e premi Invio. Un InputContext con il nome corrispondente appare in ReplicatedStorage.


Passa il mouse sopra il nuovo contesto e fai clic sul pulsante +. Dal menu a comparsa, seleziona Bool, inserisci CharacterSprint come nome dell'azione e premi Invio. Un InputAction con il nome corrispondente appare sotto il contesto.


Inserisci un nuovo Script nell'albero CharacterSprint, insieme ai vari binding di input. Quindi imposta il suo RunContext su Client e rinominalo in OnActivate.

Incolla il seguente codice nello script OnActivate. Nota la connessione dell'evento Pressed alle righe 13‑15 che raddoppia la velocità di camminata del personaggio quando un binding di input di corsa è premuto, e la corrispondente connessione dell'evento Released alle righe 16‑18 che ripristina la velocità di camminata predefinita quando un binding di input di corsa è rilasciato.
OnActivate (Client Script)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)

