Sistema di Azioni di Input

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

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.

  1. RACCOMANDATO
    Crea una Folder chiamata Inputs all'interno di ReplicatedStorage per contenere vari contesti di input.

    Nuova cartella all'interno di ReplicatedStorage, rinominata in Inputs
  2. Inserisci un nuovo InputContext nella cartella e rinominalo in PlayContext.

    Nuova istanza di InputContext all'interno di ReplicatedStorage, rinominata in PlayContext
  3. OPZIONALE
    Nella 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.

    InputContext con Priorità impostata a 2000 e Sink abilitato

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 InputEsempio di Utilizzo
BoolAzioni attivate come saltare, sparare, correre, ecc. con supporto per soglie di premuto/rilasciato su input analogici.
Direction1DAzioni variabili da zero a pieno come il pedale dell'acceleratore di un'auto o il livello di zoom di un mirino.
Direction2DMovimento direzionale 2D come la rotazione della telecamera o il movimento standard del personaggio di Roblox.
Direction3DMovimento direzionale 3D come un veicolo aereo che può levitare su/giù, accelerare/decelerare e sbandare a sinistra/destra.
ViewportPositionCoordinate 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:

  1. RACCOMANDATO
    Seleziona l'oggetto Workspace a livello superiore nell'Esplora e poi, nella finestra Proprietà, imposta la proprietà PlayerScriptsUseInputActionSystem su Enabled.

  2. Crea un nuovo InputAction all'interno del contesto PlayContext in ReplicatedStorage. Rinominalo in CharacterSprint per indicare la sua azione dedicata.

    Nuova istanza di InputAction all'interno di un InputContext, rinominata in CharacterSprint
  3. Nella finestra Proprietà, nota che il Type dell'azione è Bool (predefinito). Questo è un tipo logico per la semplice corsa del personaggio come azione booleana true/false (il personaggio sta correndo o non sta correndo).

    Proprietà Type di un InputAction impostata su Bool

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.

AzioniMouse/TastieraGamepadTouch
Apri menu RobloxEscStart pulsante (ButtonStart)N/A
Console SviluppatoreF9N/AN/A
Modalità a schermo intero (Windows)
Mostra desktop (Mac)
F11N/AN/A
Registra video (Windows)F12N/AN/A
Fai uno screenshotPrintScreenN/AN/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:

  1. Inserisci un nuovo InputBinding nell'azione CharacterSprint e rinominalo in KeyboardBinding. Quindi imposta la proprietà KeyCode del binding su LeftShift.

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

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

  4. 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.

  • Pressed — Questo evento si attiva solo quando il Type dell'input è impostato su Bool, e solo quando lo stato passa da false a true.
  • Released — Questo evento si attiva solo quando il Type dell'input è impostato su Bool, e solo quando lo stato passa da true a false.
  • 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 InputBindingsRestituito 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:

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

  2. Incolla il seguente codice nello script OnActivate. Nota la connessione dell'evento Pressed alle righe 1315 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 1618 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.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
  3. 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.

  1. 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.

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

  3. 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 bindable
    contextEvent.Event:Connect(function(targetContext, enabled)
    local context = inputsFolder:FindFirstChild(targetContext)
    if context then
    context.Enabled = enabled
    print(context.Name .. ": " .. tostring(context.Enabled))
    else
    warn("InputContext non trovato!")
    end
    end)
  4. 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 Pulsante
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    local button = script.Parent
    button.Activated:Connect(function()
    -- Attiva l'evento bindable con il contesto di input target e stato abilitato
    contextEvent: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.

Cartella all'interno di ReplicatedStorage chiamata Inputs

Per configurare un'impostazione di input per corsa del personaggio come descritto nelle sezioni sopra:

  1. RACCOMANDATO
    Seleziona l'oggetto Workspace a livello superiore nell'Esplora e poi, nella finestra Proprietà, imposta la proprietà PlayerScriptsUseInputActionSystem su Enabled.

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

  3. 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.

    Nuova istanza di InputContext all'interno di ReplicatedStorage chiamata PlayContext
  4. 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.

    Nuova istanza di InputAction all'interno di un InputContext chiamato CharacterSprint
  5. Nella nuova riga CharacterSprint, assegna i binding per ciascun tipo di input:

    1. Tastiera e Mouse — Fai clic sul pulsante a freccia e seleziona LeftShift dal menu di selezione.
    2. Touch — Fai clic sulla cella e poi, nell'Esplora gerarchia, fai clic sull'oggetto SprintButton che hai precedentemente inserito nel ScreenGui.
    3. Gamepad — Fai clic sul pulsante a freccia e seleziona ButtonY dal menu di selezione.
  6. Inserisci un nuovo Script nell'albero CharacterSprint, insieme ai vari binding di input. Quindi imposta il suo RunContext su Client e rinominalo in OnActivate.

  7. Incolla il seguente codice nello script OnActivate. Nota la connessione dell'evento Pressed alle righe 1315 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 1618 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.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.