ContextActionService
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Consente a un'esperienza di associare l'input dell'utente a azioni contestuali, o azioni che sono ab
Contesto e azione
Un contesto è semplicemente una condizione durante cui un giocatore può eseguire alcuna azione. Alcuni esempi includono il mantenimento di un Tool , essere Class.Seat|s
Un'azione è semplicemente un input che il giocatore può esegu
Mappa Aazioni contestualmente
È meglio usare il <
Ispezionando azioni di confine
Per vedere una lista di azioni e le loro rispunte inPUT, puoi ispezionare la scheda "Action Bindings" nella Developer Console (F9 mentre in Gioco). Ciò mostra tutte le azioni, tra cui quelle legate dagli
Inserimento senza tastiera
Questo servizio è particolarmente utile per supportare il gamepad e l'input touch. Per l'input del gamepad, puoi scegliere di associare il pulsante B a un'azione che restituisce l'utente al menu precedente quando entra in un altro menu. Per l'触reno, i pulsanti sull
Campioni di codice
local ContextActionService = game:GetService("ContextActionService")
local ACTION_RELOAD = "Reload"
local tool = script.Parent
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_RELOAD and inputState == Enum.UserInputState.Begin then
print("Reloading!")
end
end
tool.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_RELOAD, handleAction, true, Enum.KeyCode.R)
end)
tool.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_RELOAD)
end)
Sommario
Proprietà
Metodi
- BindAction(actionName : string,functionToBind : function,createTouchButton : bool,inputTypes : Tuple):void
Leggi l'input dell'utente a un'azione che ha una funzione di gestione delle azioni.
Si comporta come BindAction ma consente anche a una priorità di essere assegnata all'azione legata per i tipi di input sovrappositivi (più alto prima di più basso).
Leggi un Class.Tool.Activation con un Enum.UserInputType specifico per attivare Tool.Activation e 1> Class.ClickDetector1> eventi.
Ottieni una tabella di informazioni su tutte le azioni legate (la chiave è il nome passato a BindAction , il valore è una tabella da GetBoundActionInfo quando viene chiamata con la chiave).
Ottieni una tabella di informazioni su un'azione legata dal suo nome originariamente passato a BindAction .
Restituisci il BackpackItem.TextureId di un Tool attualmente equipped dal 1> Class.Player1> .
Data la descrizione di un'azione con un pulsante touch, imposta la descrizione dell'azione.
Se actionName key contiene un'azione legata, allora image è impostato come l'immagine del pulsante di tocco.
Data la posizione di un'azione con un pulsante di destinazione, imposta la posizione del pulsante all'interno del ContextButtonFrame.
Data la nome di un'azione legata con un pulsante touch, imposta il testo mostrato sul pulsante.
Unbind un'azione dall'input dato il suo nome.
- UnbindActivate(userInputTypeForActivation : Enum.UserInputType,keyCodeForActivation : Enum.KeyCode):void
Unbind a Enum.KeyCode con un specifico Enum.UserInputType dal momento in cui si attiva Tool.Activation quando è legato a 1> Class.Tool.Activation()1> .
Rimuove tutte le funzioni legate. Non verranno rimosse alcune azioni. Tutti i pulsanti di tocco verranno rimossi.
Recupera un ImageButton di una azione bound che aveva un pulsante di input touch creato.
Eventi
Proprietà
Metodi
BindAction
Leggi la politica sulla privacy di User.io .
L'esempio di codice seguente mostra come un Sound può essere played mentre un tasto ( H), un pulsante del gamepad o un tocco sullo schermo tocco sono premuti.
local ContextActionService = game:GetService("ContextActionService")
-- Un suono di clacson
local honkSound = Instance.new("Sound", workspace)
honkSound.Looped = true
honkSound.SoundId = "rbxassetid://9120386436"
local function handleAction(actionName, inputState, inputObject)
if actionName == "HonkHorn" then
if inputState == Enum.UserInputState.Begin then
honkSound:Play()
else
honkSound:Pause()
end
end
end
-- Quando il giocatore si siede nel veicolo:
ContextActionService:BindAction("HonkHorn", handleAction, true, Enum.KeyCode.H, Enum.KeyCode.ButtonY)
-- Quando il giocatore esce:
ContextActionService:UnbindAction("HonkHorn")
Parametri dell'azione del gestore
I parametri di azione sono chiamati con i seguenti parametri:
<tr><td>1</td><td><code>stringa</code></td><td>La stessa stringa che era originariamente passata a BindAction</td></tr><tr><td>2</td><td><code>Enum.UserInputState</code></td><td>Lo stato dell'input (Inizia, Cambia, Fine o Cancella)\*</td></tr><tr><td>3</td><td><code>oggetto di input</code></td><td>Un oggetto che contiene informazioni sull'input (varia a seconda di UserInputType)</td></tr>
# | Tipo | Descrizione |
^ Ciò consente a una funzione di gestire più azioni contemporaneamente, se necessario. * Annulla viene inviato se qualche input era in corso e un'altra azione era legata all'input in corso, o se l'azione in corso era unbound .
Pila di legami di azione
I legami
Bottoni di Touch
Oltre ai tipi di input, questo parametro della funzione controlla se viene Creazioniun pulsante per Class.UserInputService.TouchEnabled|TouchEnabled
Parametri
Una stringa che rappresenta l'azione in esecuzione (ad esempio "HonkHorn" o "OpenDoor").
La funzione di gestione delle azioni, chiamata con i seguenti parametri quando gli input legati vengono attivati: string (actionName), Enum.UserInputState e un oggetto di input.
Se dovrebbe essere creato un pulsante GUI per l'azione su dispositivi di input touch.
Qualsiasi numero di Enum.KeyCode o Enum.UserInputType che rappresenta gli input per legare all'azione.
Restituzioni
Campioni di codice
local ContextActionService = game:GetService("ContextActionService")
local ACTION_RELOAD = "Reload"
local tool = script.Parent
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_RELOAD and inputState == Enum.UserInputState.Begin then
print("Reloading!")
end
end
tool.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_RELOAD, handleAction, true, Enum.KeyCode.R)
end)
tool.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_RELOAD)
end)
local ContextActionService = game:GetService("ContextActionService")
local function handleAction(actionName, inputState, inputObj)
if inputState == Enum.UserInputState.Begin then
print("Handling action: " .. actionName)
print(inputObj.UserInputType)
end
-- Since this function does not return anything, this handler will
-- "sink" the input and no other action handlers will be called after
-- this one.
end
ContextActionService:BindAction("BoundAction", handleAction, false, Enum.KeyCode.F)
local ContextActionService = game:GetService("ContextActionService")
-- Define an action handler for FirstAction
local function actionHandlerOne(actionName, inputState, _inputObj)
if inputState == Enum.UserInputState.Begin then
print("Action Handler One: " .. actionName)
end
-- This action handler returns nil, so it is assumed that
-- it properly handles the action.
end
-- Binding the action FirstAction (it's on the bottom of the stack)
ContextActionService:BindAction("FirstAction", actionHandlerOne, false, Enum.KeyCode.Z, Enum.KeyCode.X, Enum.KeyCode.C)
-- Define an action handler for SecondAction
local function actionHandlerTwo(actionName, inputState, inputObj)
if inputState == Enum.UserInputState.Begin then
print("Action Handler Two: " .. actionName)
end
if inputObj.KeyCode == Enum.KeyCode.X then
return Enum.ContextActionResult.Pass
else
-- Returning nil implicitly Sinks inputs
return Enum.ContextActionResult.Sink
end
end
-- Binding SecondAction over the first action (since it bound more recently, it is on the top of the stack)
-- Note that SecondAction uses the same keys as
ContextActionService:BindAction("SecondAction", actionHandlerTwo, false, Enum.KeyCode.Z, Enum.KeyCode.X)
BindActionAtPriority
BindActionAtPriority si comporta come BindAction ma consente anche a una priorità di essere assegnata all'azione legata. Se più azioni sono legate allo stesso input, la funzione di priorità più alta viene chiamata indipendentemente dall'ordine in cui le azioni sono legate. In altre parole, questa funzione sovrascrive il comportamento "stack" normale di BindAction.
Parametri
Una stringa che rappresenta l'azione in esecuzione (ad esempio "HonkHorn" o "OpenDoor").
La funzione di gestione delle azioni, chiamata con i seguenti parametri quando gli input legati vengono attivati: string (actionName), Enum.UserInputState e un oggetto di input.
Se dovrebbe essere creato un pulsante GUI per l'azione su dispositivi di input touch.
Il livello di priorità a cui l'azione dovrebbe essere legata (più alto considerato prima).
Qualsiasi numero di Enum.KeyCode o Enum.UserInputType che rappresenta gli input a cui associare l'azione.
Restituzioni
Campioni di codice
local ContextActionService = game:GetService("ContextActionService")
local INPUT_KEY1 = Enum.KeyCode.Q
local INPUT_KEY2 = Enum.KeyCode.E
local function handleThrow(actionName: string, inputState: Enum.UserInputState, inputObject: InputObject)
if inputState ~= Enum.UserInputState.Begin then
return Enum.ContextActionResult.Pass
end
print(`Action [{actionName}] occurred. KeyCode [{inputObject.KeyCode}] pressed.`)
return Enum.ContextActionResult.Sink
end
local function handlePunch(actionName: string, inputState: Enum.UserInputState, inputObject: InputObject)
if inputState ~= Enum.UserInputState.Begin then
return Enum.ContextActionResult.Pass
end
print(`Action [{actionName}] occurred. KeyCode [{inputObject.KeyCode}] pressed.`)
return Enum.ContextActionResult.Sink
end
-- Without specifying priority, the most recently bound action is called first,
-- so pressing INPUT_KEY1 prints "Punch" and then sinks the input.
ContextActionService:BindAction("DefaultThrow", handleThrow, false, INPUT_KEY1)
ContextActionService:BindAction("DefaultPunch", handlePunch, false, INPUT_KEY1)
-- Here we bind both functions in the same order as above, but with explicitly swapped priorities.
-- That is, we give "Throw" a higher priority of 2 so it will be called first,
-- despite "Punch" still being bound more recently.
-- Pressing INPUT_KEY2 prints "Throw" and then sinks the input.
ContextActionService:BindActionAtPriority("PriorityThrow", handleThrow, false, 2, INPUT_KEY2)
ContextActionService:BindActionAtPriority("PriorityPunch", handlePunch, false, 1, INPUT_KEY2)
BindActivate
Nota che il Enum.UserInputType specificato deve essere Keyboard o Gamepad1 attraverso 2>Gamepad82> per essere valido.
Parametri
Deve essere Keyboard o Gamepad1 attraverso Gamepad8.
Restituzioni
GetAllBoundActionInfo
GetAllBoundActioninfo restituisce una tabella che mappa i nomi di tutte le azioni (quelle originariamente passate a BindAction ) in una tabella restituita da GetBoundActionInfo quando viene chiamata con il nome delle azioni stesse. Utilizzando questa funzione, puoi ispezionare tutti i livelli di priorità delle azioni att
Restituzioni
GetBoundActionInfo
GetBoundActionInfo restituisce una tabella con le seguenti chiavi che descrivono un'azione legata al suo nome. Per ottenere le stesse informazioni per tutte le azioni contemporaneamente, usa GetAllBoundActionInfo .
<tr><td><code>stackOrdina</code></td><td>number</td><td>Descrive l'indice dell'azione sullo stack (aumentando)</td></tr><tr><td><code>livello di priorità</code> \*</td><td>number</td><td>Descrive il livello <code>Class.ContextActionService:BindActionAtPriority()|priority</code> dell'azione</td></tr><tr><td><code>creaTouchButton</code></td><td>booleano</td><td>Descrive se un pulsante di tocco deve essere creato su <code>Class.UserInputService.TouchEnabled|TouchEnabled</code> dispositivi</td></tr><tr><td><code>tipi di input</code></td><td>tabella</td><td>I tipi di input passati a <code>Class.ContextActionService:BindAction()|BindAction</code> per cui questa azione si grilletto</td></tr><tr><td><code>descrizione</code> ※</td><td>stringa</td><td>La descrizione dell'azione impostata da <code>Class.ContextActionService:SetDescription()|SetDescription</code></td></tr><tr><td><code>titolo</code> ^</td><td>stringa</td><td>Il titolo dell'azione impostato da <code>Class.ContextActionService:SetTitle()|SetTitle</code></td></tr><tr><td><code>immagine</code> †</td><td>stringa</td><td>L'immagine del pulsante di azione impostato da <code>Class.ContextActionService:SetImage() | SetImage</code></td></tr>
Nome | Tipo | Descrizione |
Il livello di priorità sarà ancora incluso anche se BindActionAtPriority non è stato utilizzato - per impostazione predefinita sarà 2000.
^ Indica che questo campo sarà nil se il metodo associato non è stato chiamato per l'azione fornita.
Parametri
Restituzioni
GetCurrentLocalToolIcon
GetCurrentLocalToolIcon restituirà il BackpackItem.TextureId di un Tool attualmente equipped dal giocatore, o 1> nil1> se non c'è tale strumento o se il giocatore non ha un 4> Class.Player4> .
Restituzioni
Una stringa di contenuto dalla Tool's TextureId, o nil se uno non potesse essere trovato.
SetDescription
SetDescription imposterà la descrizione di un'azione legata a BindAction . In una lista di azioni disponibili, questo sarebbe il testo che descrive l'azione fornita.
Anche se il nome potrebbe suggerire che questo metodo è correlato alla famiglia di funzioni che personalizzano un pulsante di toccare per le azioneche le creano ( SetTitle , SetImage e SetPosition ) non influisce
Parametri
Il nome dell'azione originariamente passata a BindAction.
Una descrizione del testo dell'azione, come "Honk the car's horn" o "Apri l'Inventario, reportorio".
Restituzioni
Campioni di codice
local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end
SetImage
Questo metodo imposta il contenuto dell'immagine mostrato su un pulsante touch creato da BindAction() . In particolare, imposta la proprietà ImageLabel.Image della ImageLabel all
Questa funzione fa parte di una famiglia di metodi che personalizzano il pulsante di tocco di un'azione. Altri in questa famiglia includono SetPosition e SetTitle .
Parametri
Il nome dell'azione originariamente passata a BindAction.
Il valore a cui la proprietà Immagine dovrebbe essere Impostare.
Restituzioni
Campioni di codice
local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end
SetPosition
Questo metodo imposta la posizione di un pulsante di touch creato da BindAction() . In particolare, imposta la proprietà GuiObject.Position del ImageButton che verrà restituito da 1> Class.ContextActionService:GetButton()|GetButton</
Questa funzione fa parte di una famiglia di metodi che personalizzano il pulsante di tocco di un'azione. Altri in questa famiglia includono SetImage e SetTitle .
Parametri
Il nome dell'azione originariamente passata a BindAction.
La posizione all'interno del ContextButtonFrame.
Restituzioni
Campioni di codice
local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end
SetTitle
SetTitle imposta il testo mostrato su un pulsante touch creato da BindAction . In particolare, questo imposta la proprietà TextLabel.Text di un TextLabel all'interno del 1>
Questa funzione fa parte di una famiglia di metodi che personalizzano il pulsante di tocco di un'azione. Altri in questa famiglia includono SetImage e SetPosition .
Parametri
Il nome dell'azione originariamente passata a BindAction.
Il testo da mostrare sul pulsante.
Restituzioni
Campioni di codice
local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end
UnbindAction
UnbindAction unbinda un'azione per nome dagli input dell'utente in modo che il funzionamento dell'azione gestore non sia più chiamato. Chiama questa funzione quando il contesto per un'azione non è più Applicabile, come la chiusura di un'interfaccia utente, l'esecuzione di un'auto o unequipping un Class.Tool . V
Questa funzione non lancerà un errore se non ci sono tali azioni legate con la Stringafornita. Utilizzando GetAllBoundActionInfo o la scheda "Action Bindings" della Console del Rilascio, puoi scoprire quali azioni sono attualmente legate.
Parametri
Restituzioni
Campioni di codice
local ContextActionService = game:GetService("ContextActionService")
local ACTION_RELOAD = "Reload"
local tool = script.Parent
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_RELOAD and inputState == Enum.UserInputState.Begin then
print("Reloading!")
end
end
tool.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_RELOAD, handleAction, true, Enum.KeyCode.R)
end)
tool.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_RELOAD)
end)
UnbindActivate
UnbindActivate unbinds an Enum.KeyCode (o un Enum.UserInputType ) for activating a Tool (or a 1> Class.HopperBin1> ) using 4> Class.ContextActionService:BindActivate()|BindActivate4> . This function essentially undoes the action performed by that function.
Parametri
Lo stesso UserInputType inviato originariamente a BindActivate.
Lo stesso KeyCode originariamente inviato a BindActivate.
Restituzioni
UnbindAllActions
Rimuove tutte le funzioni legate. Non ci saranno più nomi d'azione. Tutti i pulsanti di tocco saranno rimossi. Se un pulsante è stato manipolato manualmente non ci sono garanzie che sarà pulito.
Restituzioni
GetButton
GetButton restituisce il ImageButton creato da BindAction se il suo terzo parametro era vero e il dispositivo era TouchEnabled . L'unico parametro a questa funzione deve corrispondere esattamente il nome dell'azione originariamente inviata a BindAction.
Se nessuna tale azione era legata o se un pulsante non è stato creato, questa funzione restituisce nil .
Parametri
Il nome dell'azione originariamente passata a BindAction.
Restituzioni
Un ImageButton creato da BindAction.