ContextActionService
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
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
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
- BindAction(actionName : string,functionToBind : function,createTouchButton : bool,inputTypes : Tuple):void
Vincula la entrada del usuario a una acción que se le asigna a una función de manejo de acciones.
Se comporta como BindAction pero también permite asignar una prioridad a la acción vinculada para los tipos de entrada superpuestos (más alto antes de más bajo).
Vincula un Enum.KeyCode con un Enum.UserInputType específico para activar Tool.Activation y 2>Class.Tool.Activation2> eventos.
Obtenga una tabla de información sobre todas las acciones vinculadas (la clave es el nombre proporcionado a BindAction , el valor es una tabla de GetBoundActionInfo cuando se llama con la clave).
Obtener una tabla de información sobre una acción vinculada que recibió su nombre originalmente pasó a BindAction .
Return the BackpackItem.TextureId of a Tool currently equipped by the 1> Class.Player1> .
Dado el nombre de una acción vinculada con un botón de toque, establece la descripción de la acción.
Si actionName key contiene un key de acción vinculado, then image is set as the image del botón de toque.
Dado el nombre de una acción vinculada con un botón táctil, establece la posición del botón dentro del marco de contexto.
Dado el nombre de una acción vinculada con un botón táctil, establece el texto mostrado en el botón.
Desвяza una acción del nombre dado a la entrada.
- UnbindActivate(userInputTypeForActivation : Enum.UserInputType,keyCodeForActivation : Enum.KeyCode):void
Desвяza un Enum.KeyCode con un Enum.UserInputType específico al activar Tool.Activation vinculado a 2>Class.Tool.Activate2> cuando se activa con 5>Class.Tool.Activation5> .
Elimina todas las funciones vinculadas. No se eliminarán nombres de acción. Todos los botones de toque se eliminarán.
Recupera un ImageButton de una acción bound que tenía un botón de entrada táctil creado.
Eventos
Propiedades
Métodos
BindAction
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>
# | Tipo | Descripció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
Una cadena que representa la acción que se está ejecutando (por ejemplo, "HonkHorn" o "OpenDoor").
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.
Si debe crearse un botón de GUI para la acción en dispositivos de entrada táctil.
Cualquier número de Enum.KeyCode o Enum.UserInputType representando las entradas para vincular a la acción.
Devuelve
Muestras de código
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 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
Una cadena que representa la acción que se está ejecutando (por ejemplo, "HonkHorn" o "OpenDoor").
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.
Si debe crearse un botón de GUI para la acción en dispositivos de entrada táctil.
El nivel de prioridad en el que debe enlazarse la acción (más alto considerado antes de menor).
Cualquier número de Enum.KeyCode o Enum.UserInputType que represente las entradas para vincular a la acción.
Devuelve
Muestras de código
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
Vinc
Nota que el Enum.UserInputType especificado debe ser Keyboard o Gamepad1 a través de 2>Gamepad82> para ser válido.
Parámetros
Debe ser Keyboard o Gamepad1 a través de Gamepad8.
Devuelve
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>
Nombre | Tipo | Descripció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
Devuelve
GetCurrentLocalToolIcon
GetCurrentLocalToolIcon 返回 BackpackItem.TextureId 的 Tool 当前 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
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
El nombre de la acción originalmente pasó a BindAction.
Una descripción de texto de la acción, como "Honk the car's horn" o "Abrir el inventario".
Devuelve
Muestras de código
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
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
El nombre de la acción originalmente pasó a BindAction.
El valor a el que debe establecerse la propiedad de la Imagen.
Devuelve
Muestras de código
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
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
El nombre de la acción originalmente pasó a BindAction.
La posición dentro del marco de contexto.
Devuelve
Muestras de código
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 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
El nombre de la acción originalmente pasó a BindAction.
El texto para mostrar en el botón.
Devuelve
Muestras de código
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 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
Devuelve
Muestras de código
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 (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
El mismo tipo de entrada de usuario originalmente enviado a BindActivate.
El mismo KeyCode originalmente enviado a BindActivate.
Devuelve
UnbindAllActions
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
GetButton
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
El nombre de la acción originalmente pasó a BindAction.
Devuelve
Un ImageButton creado por BindAction.