Inizia
Tutorial intermedi

Rileva input dell'utente

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

Collegare l'input dell'utente alle azioni offre agli utenti un controllo molto migliore e più intuitivo sulle funzionalità della tua esperienza. In questo tutorial, legherai un'azione di ricarica a un tasto specifico.

Iniziare

Questo tutorial utilizza lo strumento Blaster creato in Crea strumenti per il giocatore. Puoi seguire quelle istruzioni per creare lo strumento oppure 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:

  1. In un browser, apri la pagina del modello e clicca sul pulsante Ottieni. Questo aggiunge il modello nel tuo inventario.
  2. Dal menu Finestra di Studio o dalla barra degli strumenti della scheda Home, apri il Toolbox e seleziona la scheda Inventario.
  3. Assicurati che il menu a discesa sia impostato su I miei modelli.
  4. Seleziona il modello Blaster per aggiungerlo all'esperienza.

Crea un gestore delle azioni

Prima di tutto, avrai bisogno di una funzione per gestire quando viene rilevato l'input dell'utente.

  1. Apri il LocalScript di ToolController all'interno del Blaster.

    Vista dell'Explorer dove è selezionato lo script ToolController all'interno dello strumento Blaster

  2. Crea una variabile per memorizzare un nome per l'azione.


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  3. Crea una funzione chiamata onAction che riceve tre argomenti: actionName, inputState e inputObject. Questa sarà la funzione che verrà eseguita quando viene rilevato l'input dell'utente.


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. All'interno della funzione, controlla che il actionName fornito corrisponda al nome dell'azione di ricarica e assicurati che inputState sia UserInputState.Begin (lo stato iniziale). Questo è importante perché la funzione verrà eseguita ogni volta che cambia inputState, ma la ricarica deve avvenire solo una volta.


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. Per rendere ovvio quando l'utente ricarica, cambia il TextureId dello strumento in "rbxassetid://6593020923" per un momento, e poi cambialo di nuovo al suo valore originale di "rbxassetid://92628145".


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end

Collega l'azione

ContextActionService può essere utilizzato per collegare una funzione a un'input specifico utilizzando la funzione BindAction, che accetta diversi argomenti:

  • Il nome dell'azione.
  • La funzione per gestire l'azione (chiamata anche "callback").
  • Se deve essere visualizzato o meno un pulsante touchscreen.
  • Qualsiasi numero di Enum.KeyCodes per rilevare e associare all'azione.

I KeyCodes sono valori che rappresentano diversi pulsanti di input, come tasti della tastiera o pulsanti del controller. Un elenco completo dei codici è disponibile qui.

  1. Ottieni ContextActionService all'inizio dello script.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. All'interno della funzione toolEquipped, chiama BindAction e passa i seguenti argomenti:

    • Il nome dell'azione (RELOAD_ACTION)
    • Il gestore dell'azione (onAction)
    • Un valore per creare un pulsante touchscreen (true)
    • Un tasto da rilevare (Enum.KeyCode.R)

    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
  3. Fai una prova giocando equipaggiando lo strumento e premendo il tasto R sulla tastiera. L'icona dello zaino dovrebbe cambiare momentaneamente in un simbolo di attesa per segnalare che l'arma si sta ricaricando:

Disconnetti l'azione

Quando l'utente disarma lo strumento, l'azione deve essere disconnessa affinché non possa ricaricare senza che lo strumento sia equipaggiato.

  1. Crea una nuova funzione chiamata toolUnequipped e chiama UnbindAction, passando il nome dell'azione.


    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  2. Collega la funzione toolUnequipped all'evento Unequipped in modo che la funzione venga eseguita quando si attiva l'evento.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Unequipped:Connect(toolUnequipped)
    tool.Activated:Connect(toolActivated)
  3. Fai una prova giocando per confermare che tutto funzioni correttamente. Dovresti essere in grado di ricaricare quando lo strumento è equipaggiato, ma non quando è disarmato.

La tua animazione di ricarica è ora completa - per una sfida extra, prova a contare un contatore di munizioni ogni volta che il blaster viene sparato. Puoi quindi disattivare la funzione toolActivated quando l'arma non ha munizioni, per poi riattivarla una volta finita l'animazione di ricarica.

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