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 multipiattaforma ti consente di connettere azioni e disporre associazioni tra vari input hardware durante il tempo 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. Gli utilizzi includono:

  • Un sistema di sparatutto in prima persona con azioni che cambiano dinamicamente a seconda che il giocatore sia in modalità battaglia o in modalità spettatore.
  • Un sistema di guida completo dotato di accelerazione/decelerazione, booster per auto e stazioni di rifornimento.
  • Tasti di scelta rapida per un sistema di abilità in un gioco di combattimento per cambiare movimenti senza interruzioni senza che i giocatori perdano un colpo.

Contesti di input

Un InputContext è una collezione di azioni che contiene azioni di input correlate, per esempio PlayContext per i controlli dei personaggi in gioco e NavContext per i controlli per navigare tra i menu dell'interfaccia utente. Puoi attivare/disattivare contesti (e le relative azioni) tramite la loro proprietà Enabled, ad esempio per attivare il NavContext quando un menu dell'inventario è aperto e poi tornare al PlayContext quando il giocatore chiude il menu e torna al gioco principale.

Anche se un gioco potrebbe non utilizzare inizialmente più contesti di input, è consigliato creare un contesto primario a livello superiore di qualsiasi sistema di input, per esempio l'istanza PlayContext per l'input che si verifica durante il gioco.

  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. Nella finestra Proprietà, imposta Priority a 2000 e abilita Sink. Un contesto con Sink attivato consuma eventi di input per i suoi KeyCodes vincolati al suo livello di priorità, bloccando quegli input dall'arrivare a contesti di priorità inferiore. Questo è pratico per casi d'uso come uno schermo dell'inventario che dovrebbe sopprimere specifici input di gioco mentre è aperto. In questo esempio, PlayContext riceve un Priority sufficientemente alto per affondare i suoi input vincolati prima che i contesti di default PlayerScripts li elaborino.

Azioni di input

Un InputAction definisce una meccanica di azione di gioco come "Salta", "Corri" o "Spara". Queste azioni sono quindi mappate a input hardware utilizzando associazioni 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 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 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, come per cursori personalizzati o raycasting per selezionare oggetti nel mondo.

Per testare un InputAction per il semplice sprinting del personaggio:

  1. Crea un nuovo InputAction all'interno del contesto PlayContext in ReplicatedStorage. Rinominatelo in CharacterSprint per indicarne l'azione dedicata.

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

    Proprietà Type di un InputAction impostata su Bool

Associazioni di input

Un InputBinding definisce quale associazione 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à multipiattaforma, ogni InputAction dovrebbe avere un InputBinding per gamepad, tastiera/mouse e touch come illustrato qui.

Il Type assegnato al InputAction genitore influisce direttamente su quali tipi di input generali (tasto/pulsante/tocco, trigger analogico, joystick, ecc.) sono validi per le istanze InputBinding figlie. A loro volta, i valori inviati agli eventi connessi all'azione genitore dipendono dal tipo di input scelto da un'associazione. Vedi eventi di input per dettagli sulla correlazione tra tipi di azioni, associazioni e valori restituiti.

Per configurare le associazioni per il semplice sprinting del personaggio:

  1. Inserisci un nuovo InputBinding nell'azione CharacterSprint e rinominalo in KeyboardBinding. Imposta poi la proprietà KeyCode dell'associazione su LeftShift.

  2. Per garantire che il Shift di blocco del mouse non interferisca con l'associazione di tasti, seleziona StarterPlayer nell'Esplora e disabilita la sua EnableMouseLockOption nella finestra delle Proprietà.

  3. Inserisci un secondo InputBinding nell'azione CharacterSprint e rinominalo in GamepadBinding. Imposta poi la proprietà KeyCode dell'associazione su ButtonY.

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

  5. Inserisci un terzo InputBinding nell'azione CharacterSprint e rinominalo in TouchBinding. Poi, nella finestra Proprietà, collega la proprietà UIButton dell'associazione al pulsante SprintButton che hai creato in precedenza dentro 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, eccetto 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, trigger analogico, joystick, ecc.), diversi valori vengono restituiti ai gestori degli eventi Pressed, Released e StateChanged. Esamina le seguenti tabelle per comprendere meglio la correlazione.

Il tipo Bool è meglio per azioni attivate come saltare, sparare, correre, ecc. con supporto per soglie premuto/rilasciato su input analogici.

Tipi di Input Validi su InputBindingsRestituiti all'evento InputAction
Input booleani da tasti della tastiera o pulsanti di mouse/gamepad di base tramite la proprietà KeyCode dell'associazione, o una pressione/rilascio di un GuiButton tramite la proprietà UIButton dell'associazione.
Input variabili da input analogici come i trigger del gamepad (ButtonL2/ButtonR2) tramite la proprietà KeyCode dell'associazione.

Per collegare eventi per il semplice sprinting del personaggio:

  1. Inserisci un nuovo Script nell'albero di CharacterSprint, accanto alle varie associazioni di input. Imposta poi il suo RunContext su Client e rinominalo in OnActivate.

  2. Incolla il seguente codice nello script OnActivate. Nota la connessione all'evento Pressed sulle righe 1315 che raddoppia la velocità di camminata del personaggio quando viene premuta un'associazione di input di sprint, e la corrispondente connessione all'evento Released sulle righe 1618 che ripristina la velocità di camminata predefinita quando viene rilasciata un'associazione di input di sprint.

    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. Fai un test del tuo gioco e verifica l'azione di sprint del personaggio con le associazioni che hai scelto in precedenza: LeftShift per la tastiera, ButtonY per il gamepad, e il pulsante su schermo SprintButton per i dispositivi abilitati al tocco. Ricorda che puoi usare l'Emulatore di Controller per testare l'input del gamepad direttamente in Roblox Studio.

Modifiche di contesto

Una volta che hai un contesto di input come PlayContext, puoi attivarlo/disattivarlo durante il gioco tramite script, cambiare la sua Priority per determinare quali azioni hanno la precedenza su altre e Sink gli input per non essere elaborati all'interno dei contesti di priorità inferiore.

  1. Per rendere più facile passare ai 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")
    -- Collega l'evento dicibile
    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("Contesto di input non trovato!")
    end
    end)
  4. Con lo script UpdateContext in atto, ora puoi aggiornare un InputContext denominato attivando l'evento dicibile, ad esempio da uno 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 dicibile con il contesto di input di destinazione e lo stato abilitato
    contextEvent:Fire("PlayContext", true)
    end)

Associazioni predefinite

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