ContextActionService

Mostrar obsoleto

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

No creable
Servicio

Permite a una experiencia vincular la entrada del usuario a acciones contextuales, o acciones que solo se habilitan bajo alg

Contexto e acción

Un contexto es simplemente una condición durante la cual un jugador puede realizar alguna acción. Algunos ejemplos incluyen mantener un Tool , estar sentado en un asiento de coche o al pie de una puerta.

Una acción es simplemente un par de entrada que el jugador puede

Vinculando Acciones Contextualmente

Es mejor usar ContextActionService's <

Inspeccionando Acciones de Límite

Para ver una lista de acciones y sus entradas vinculadas, puede inspeccionar la pestaña "Vinculación de acciones" en la Consola del Desarrollador (F9 mientras está en el juego). Esto muestra todas las vinc

Entrada sin teclado

Este servicio es especialmente útil para apoyar la plataforma de juegos y la entrada táctil. Para la entrada táctil, puede elegir vincular el botón B a una acción que devuelve al usuario al menú anterior cuando ingresa a otro menú. Para la entrada de juegos,

Muestras de código

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)

Resumen

Métodos

Eventos

Propiedades

Métodos

BindAction

void

Vincula una acción a la entrada de usuario dada una función de manejo de acciones. Cuando

El código de ejemplo a continuación muestra cómo un Sound puede ser played mientras una tecla ( H), botón de plataforma de juego o botón de pantalla táctil se presiona.


local ContextActionService = game:GetService("ContextActionService")
-- Un sonido de cuerno de automóvil
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
-- Cuando el jugador se sienta en el vehículo:
ContextActionService:BindAction("HonkHorn", handleAction, true, Enum.KeyCode.H, Enum.KeyCode.ButtonY)
-- Cuando el jugador se vaya:
ContextActionService:UnbindAction("HonkHorn")

Parámetros de manejador de acción

Las funciones de manejador de acciones se llaman con los siguientes parámetros:


<tr>
<td>1</td>
<td><code>cadena</code></td>
<td>La misma cadena que se pasó originalmente a BindAction</td>
</tr>
<tr>
<td>2</td>
<td><code>Estado de entrada de usuario</code></td>
<td>El estado de la entrada (Empezar, Cambiar, Terminar o Cancelar)\*</td>
</tr>
<tr>
<td>3</td>
<td><code>Objeto de entrada</code></td>
<td>Un objeto que contiene información sobre la entrada (varía según UserInputType)</td>
</tr>
#TipoDescripción

° Esto permite que una función maneje múltiples acciones a la vez, si es necesario. *Cancel se envía si se ingresó alguna acción en progreso y otra acción vinculada a la entrada en progreso, o si la acción vinculada en progreso era unbound .

Pila de vinculaciones de acciones

Las funciones

Botones táctiles

Además de los tipos de entrada, este parámetro de función controla si se creacionesun botón para dispositivos Class.UserInputService.TouchEnabled

Parámetros

actionName: string

Una cadena que representa la acción que se está ejecutando (por ejemplo, "HonkHorn" o "OpenDoor").

functionToBind: function

La función de manejo de acciones, llamada con los siguientes parámetros cuando se activan los input de vinculación: string (actionName), Enum.UserInputState y un objeto de entrada.

createTouchButton: bool

Si debe crearse un botón de GUI para la acción en dispositivos de entrada táctil.

inputTypes: Tuple

Cualquier número de Enum.KeyCode o Enum.UserInputType representando las entradas para vincular a la acción.


Devuelve

void

Muestras de código

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 se comporta como BindAction pero también permite asignar una prioridad a la acción vinculada. Si varias acciones están vinculadas a la misma entrada, la función de prioridad más alta se llama independientemente del orden en que se vinculan las acciones. En otras palabras, esta función sobresigue el comportamiento normal de BindAction.

Parámetros

actionName: string

Una cadena que representa la acción que se está ejecutando (por ejemplo, "HonkHorn" o "OpenDoor").

functionToBind: function

La función de manejo de acciones, llamada con los siguientes parámetros cuando se activan los input de vinculación: string (actionName), Enum.UserInputState y un objeto de entrada.

createTouchButton: bool

Si debe crearse un botón de GUI para la acción en dispositivos de entrada táctil.

priorityLevel: number

El nivel de prioridad en el que debe enlazarse la acción (más alto considerado antes de menor).

inputTypes: Tuple

Cualquier número de Enum.KeyCode o Enum.UserInputType que represente las entradas para vincular a la acción.


Devuelve

void

Muestras de código

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

Vinc

Nota que el Enum.UserInputType especificado debe ser Keyboard o Gamepad1 a través de 2>Gamepad82> para ser válido.

Parámetros

userInputTypeForActivation: Enum.UserInputType

Debe ser Keyboard o Gamepad1 a través de Gamepad8.

keyCodesForActivation: Tuple

Devuelve

void

GetAllBoundActionInfo

GetAllboundActioninfo devuelve una tabla que mapa todos los nombres de acción (los que se originaron originalmente en BindAction ) a una tabla devuelta por GetBoundActionInfo cuando se llama con el nombre de acción. Esto es útil cuando se debuga sus niveles de prioridad o órdenes de apilamiento.


Devuelve

GetBoundActionInfo

GetBoundActionInfo返回一个包含以下键描述给予其名称的边界操作的表。要获得所有操作的相同信息,请使用 GetAllBoundActionInfo


<tr>
<td><code>Orden de pila</code></td>
<td>número</td>
<td>
Describe el índice de la acción en la pila (aumentando)
</td>
</tr>
<tr>
<td><code>nivel de prioridad</code> \*</td>
<td>número</td>
<td>
Describe el nivel de <code>Class.ContextActionService:BindActionAtPriority()|priority</code> de la acción
</td>
</tr>
<tr>
<td><code>crearTouchButton</code></td>
<td>booleano</td>
<td>
Describe si debe crearse un botón de toque en <code>Class.UserInputService.TouchEnabled|TouchEnabled</code> dispositivos
</td>
</tr>
<tr>
<td><code>tipos de entrada</code></td>
<td>mesa</td>
<td>
Los tipos de entrada pasados a <code>Class.ContextActionService:BindAction() |BindAction</code> para los cuales se desencadenadoresta acción
</td>
</tr>
<tr>
<td><code>descripción</code> ^</td>
<td>cadena</td>
<td>
La descripción de la acción establecida por <code>Class.ContextActionService:SetDescription()|SetDescription</code>
</td>
</tr>
<tr>
<td><code>título</code> ^</td>
<td>cadena</td>
<td>
El título del conjunto de acciones establecido por <code>Class.ContextActionService:SetTitle()|SetTitle</code>
</td>
</tr>
<tr>
<td><code>imagen</code> ^</td>
<td>cadena</td>
<td>
La imagen del botón de acción del objeto de tiempo de ejecución establecido por <code>Class.ContextActionService:SetImage()|SetImage</code>
</td>
</tr>
NombreTipoDescripción

Aún se incluirá el nivel de prioridad incluso si no se usa BindActionAtPriority - por defecto será 2000.

Indica que este campo será nil si el método asociado no fue llamado para la acción proporcionada.

Parámetros

actionName: string

Devuelve

GetCurrentLocalToolIcon

GetCurrentLocalToolIcon 返回 BackpackItem.TextureIdTool 当前 equipped 通过 1> Class.Player1> 或 4> nil4> 如果没有 such 工具或玩家没有 7> Class.Player


Devuelve

Una cadena de contenido del ID de la Textura de la Herramienta, o nulo si no se pudo encontrar.

SetDescription

void

La descripción de la acción se establecerá por BindAction . En una lista de acciones disponibles, esto sería el texto que describe la acción proporcionada.

Aunque el nombre puede sugerir que este método está relacionado con la familia de funciones que personalizan un botón de toque para las acciónque crean ( SetTitle , SetImage y SetPosition), este método no afecta a un

Parámetros

actionName: string

El nombre de la acción originalmente pasó a BindAction.

description: string

Una descripción de texto de la acción, como "Honk the car's horn" o "Abrir el inventario".


Devuelve

void

Muestras de código

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

Este método establece la imagen mostrada en un botón táctil creado por BindAction() . En particular, establece la propiedad ImageLabel.Image de la ImageLabel dentro del

Esta función es parte de una familia de métodos que personalizan el botón de toque de una acción. Otros en esta familia incluyen SetPosition y SetTitle .

Parámetros

actionName: string

El nombre de la acción originalmente pasó a BindAction.

image: string

El valor a el que debe establecerse la propiedad de la Imagen.


Devuelve

void

Muestras de código

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

Este método establece la posición de un botón de toque creado por BindAction() . En particular, establece la propiedad GuiObject.Position del botón de toque que se devolvería por ImageButton . Si no existe tal acción vinc

Esta función es parte de una familia de métodos que personalizan el botón de toque de una acción. Otros en esta familia incluyen SetImage y SetTitle .

Parámetros

actionName: string

El nombre de la acción originalmente pasó a BindAction.

position: UDim2

La posición dentro del marco de contexto.


Devuelve

void

Muestras de código

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 establecerá el texto mostrado en un botón de toque creado por BindAction . En particular, esto establece la propiedad TextLabel.Text de un TextLabel dentro del

Esta función es parte de una familia de métodos que personalizan el botón de toque de una acción. Otros en esta familia incluyen SetImage y SetPosition .

Parámetros

actionName: string

El nombre de la acción originalmente pasó a BindAction.

title: string

El texto para mostrar en el botón.


Devuelve

void

Muestras de código

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 desвяzará una acción por nombre de los usuarios para que el operador de acciones no se llame más. Llamar a esta función cuando el contexto de alguna acción ya no sea aplicable, como cerrar una interfaz de usuario, salir de un coche o unequipping un Class.Tool . Ver Class.ContextActionService:Bind

Esta función no lanzará un error si no hay tal acción vinculada con la cadena proporcionada . Usando GetAllBoundActionInfo o la pestaña "Acciones vinculadas" de la consola de desarrollador, puede encontrar qué acciones están vinculadas actualmente.

Parámetros

actionName: string

Devuelve

void

Muestras de código

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 (o un 1> Class.UserInputType1> ) using 4> Class.ContextActionService:BindActivate()|BindActivate4> . Esta función básicamente deshace la acción realizada por esa

Parámetros

userInputTypeForActivation: Enum.UserInputType

El mismo tipo de entrada de usuario originalmente enviado a BindActivate.

keyCodeForActivation: Enum.KeyCode

El mismo KeyCode originalmente enviado a BindActivate.

Valor predeterminado: "Unknown"

Devuelve

void

UnbindAllActions

void

Elimina todas las funciones vinculadas. No se eliminarán nombres de acción. Todos los botones de toque se eliminarán. Si se manipuló un botón manualmente, no hay garantía de que se limpie.


Devuelve

void

GetButton

Proporciona

GetButton返回创建的 ImageButton 创建 BindAction 如果其第三个参数是 true 并且设备是 TouchEnabled 。 该函数的唯一参数必须与原始发送到 BindAction 的操作名称相匹配。

Si no se vinculó tal acción o si no se creó un botón, esta función devuelve nil .

Parámetros

actionName: string

El nombre de la acción originalmente pasó a BindAction.


Devuelve

Un ImageButton creado por BindAction.

Eventos

LocalToolEquipped

Se activa cuando el jugador actual equipa un Tool .

Parámetros

toolEquipped: Instance

LocalToolUnequipped

Dispara cuando el jugador actual desequipa un Tool .

Parámetros

toolUnequipped: Instance