ContextActionService

Visualizza obsoleti

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

Non costruibile
Assistenza

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

ContextActionService Tool Reload

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

Metodi

Eventi

Proprietà

Metodi

BindAction

void

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>
#TipoDescrizione

^ 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

actionName: string

Una stringa che rappresenta l'azione in esecuzione (ad esempio "HonkHorn" o "OpenDoor").

functionToBind: function

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.

createTouchButton: bool

Se dovrebbe essere creato un pulsante GUI per l'azione su dispositivi di input touch.

inputTypes: Tuple

Qualsiasi numero di Enum.KeyCode o Enum.UserInputType che rappresenta gli input per legare all'azione.


Restituzioni

void

Campioni di codice

ContextActionService Tool Reload

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)
General Action Handler

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)
Stacked Action Handlers

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

void

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

actionName: string

Una stringa che rappresenta l'azione in esecuzione (ad esempio "HonkHorn" o "OpenDoor").

functionToBind: function

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.

createTouchButton: bool

Se dovrebbe essere creato un pulsante GUI per l'azione su dispositivi di input touch.

priorityLevel: number

Il livello di priorità a cui l'azione dovrebbe essere legata (più alto considerato prima).

inputTypes: Tuple

Qualsiasi numero di Enum.KeyCode o Enum.UserInputType che rappresenta gli input a cui associare l'azione.


Restituzioni

void

Campioni di codice

ContextActionService BindAction Priorities

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

void

Nota che il Enum.UserInputType specificato deve essere Keyboard o Gamepad1 attraverso 2>Gamepad82> per essere valido.

Parametri

userInputTypeForActivation: Enum.UserInputType

Deve essere Keyboard o Gamepad1 attraverso Gamepad8.

keyCodesForActivation: Tuple

Restituzioni

void

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>
NomeTipoDescrizione

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

actionName: string

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

void

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

actionName: string

Il nome dell'azione originariamente passata a BindAction.

description: string

Una descrizione del testo dell'azione, come "Honk the car's horn" o "Apri l'Inventario, reportorio".


Restituzioni

void

Campioni di codice

ContextActionService Touch Button

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

void

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

actionName: string

Il nome dell'azione originariamente passata a BindAction.

image: string

Il valore a cui la proprietà Immagine dovrebbe essere Impostare.


Restituzioni

void

Campioni di codice

ContextActionService Touch Button

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

void

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

actionName: string

Il nome dell'azione originariamente passata a BindAction.

position: UDim2

La posizione all'interno del ContextButtonFrame.


Restituzioni

void

Campioni di codice

ContextActionService Touch Button

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

void

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

actionName: string

Il nome dell'azione originariamente passata a BindAction.

title: string

Il testo da mostrare sul pulsante.


Restituzioni

void

Campioni di codice

ContextActionService Touch Button

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

void

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

actionName: string

Restituzioni

void

Campioni di codice

ContextActionService Tool Reload

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

void

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

userInputTypeForActivation: Enum.UserInputType

Lo stesso UserInputType inviato originariamente a BindActivate.

keyCodeForActivation: Enum.KeyCode

Lo stesso KeyCode originariamente inviato a BindActivate.

Valore predefinito: "Unknown"

Restituzioni

void

UnbindAllActions

void

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

void

GetButton

Resa

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

actionName: string

Il nome dell'azione originariamente passata a BindAction.


Restituzioni

Un ImageButton creato da BindAction.

Eventi

LocalToolEquipped

Si attiva quando il giocatore attuale equipaggia un Tool .

Parametri

toolEquipped: Instance

LocalToolUnequipped

Si attiva quando il giocatore corrente disequipaggia un Tool .

Parametri

toolUnequipped: Instance