ContextActionService

Mostrar obsoleto

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Não criável
Serviço

Permite que uma experiência vincule a entrada do usuário a ações contextuais ou ações que só são habilitadas sob alguma condição ou período de tempo.Por exemplo, permitir que um jogador abra uma porta somente enquanto estiver perto.Em código, uma ação é simplesmente uma string (o nome da ação) usada pelo serviço para diferenciar entre ações únicas.A string de ação é fornecida para BindAction e UnbindAction, entre outras funções de membros.Se duas ações estiverem vinculadas ao mesmo input, a mais recentemente vinculada terá prioridade.Quando a ação mais recente é desvinculada, a vinculada antes disso retoma o controle novamente.Como este serviço lida com a entrada do usuário, você só pode usá-lo no lado do cliente LocalScripts.

Contexto e Ação

Um contexto é simplesmente uma condição durante a qual um jogador pode realizar alguma ação .Alguns exemplos incluem segurar um Tool , sendo seated em um carro ou ficando perto de uma porta.Seja qual for o caso, cabe ao seu LocalScripts chamar BindAction quando o contexto for inserido e UnbindAction quando o contexto for deixado.

Uma ação é simplesmente alguma entrada que pode ser realizada pelo jogador enquanto nesse contexto .Uma ação como essa poderia abrir/fechar algum menu, acionar uma ação de ferramenta secundária ou enviar um pedido ao servidor usando RemoteFunction:InvokeServer().Uma ação é identificada por uma string única como o primeiro parâmetro de ambos BindAction e UnbindAction.A string pode ser qualquer coisa, mas deve refletir a ação realizada, não o input usado .Por exemplo, não use "KeyH" como um nome de ação - use "CarHorn" em vez disso.É melhor definir suas ações como uma constante no topo do seu script, pois você as usará em pelo menos três locais diferentes em seu código.

Vincular Ações Contextualmente

É melhor usar o BindAction``Class.UserInputService.InputBegan para a maioria dos casos.Para UserInputService.InputBegan , sua função conectada teria que verificar se o jogador está no contexto da ação que está sendo realizada.Na maioria dos casos, isso é mais difícil do que simplesmente chamar uma função quando um contexto é inserido/deixado.Por exemplo, se você quiser que a tecla H gatilone um som de buzina do carro enquanto o jogador está sentado nela, o jogador pode digitar "olá" no chat ou usar a tecla H para outra coisa.É mais difícil determinar se outra coisa está usando a chave H (como o chat) - o carro pode apitar quando o jogador não queria.Se você usar BindAction e UnbindAction ao invés disso quando o jogador entra/sai do carro, ContextActionService garantirá que os pressionamentos de tecla H só serão acionados pela honk action quando ela for a ação mais recentemente vinculada.Se outra coisa (como o chat) assumir o controle, você não precisará se preocupar em verificar isso.

Inspecionando Ações Vinculadas

Para ver uma lista de ações e seus inputs vinculados, você pode inspecionar a aba "Vinculações de Ações" no Console do Desenvolvedor (F9 enquanto estiver no jogo).Isso mostra todas as interfaces, incluindo as vinculadas por scripts de núcleo do Roblox e scripts de câmera/controle padrão também.Isso é útil para debugar se suas ações estão sendo vinculadas/desvinculadas na hora certa ou se alguma outra ação está roubando a entrada de suas ações.Por exemplo, se você estiver tentando vincular WASD , pode ser o caso de os scripts de movimento de personagens padrão estarem vinculados a essas mesmas chaves.Da mesma forma, o script de controle de câmera pode roubar a entrada de clique direito se o script for executado após o seu.

Entrada Sem Teclado

Este serviço é especialmente útil para suportar gamepad e entrada de toque.Para a entrada do gamepad, você pode optar por vincular o botão B a uma ação que retorna o usuário ao menu anterior quando eles entram em outro menu.Para toque, botões de toque na tela podem ser usados ​​em vez de pressionar teclas: esses botões são exibidos apenas enquanto a ação está vinculada e a posição, o texto e/ou as imagens desses botões podem ser configurados através deste serviço.Eles são um pouco limitados na quantidade de personalização fornecida por este serviço; geralmente é uma ideia melhor fazer seus próprios botões na tela usando ImageButton ou TextButton.

Amostras de código

This example properly shows how to use ContextActionService in binding user input to a contextual action. The context is the tool being equipped; the action is reloading some weapon. Test this code sample by placing it in a LocalScript parented to a Tool. When the Tool is equipped, a "Reload" action is bound, and when the Tool is unequipped the "Reload" action is unbound. When the player presses R with the Tool equipped, the message "Reloading!" will appear.

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)

Resumo

Métodos

Eventos

Propriedades

Métodos

BindAction

()

Vincule uma ação à entrada do usuário dada uma função de processamento de ação.Após uma entrada correspondente ser executada, a função de processador de ação será chamada com os argumentos listados abaixo.Itens de enumeração de entrada válidos incluem aqueles dentro do seguindo: Enum.KeyCode , Enum.UserInputType ou Enum.PlayerActions .Chame essa função quando um jogador entrar no contexto em que uma ação pode ser realizada.Quando o jogador deixa o contexto, chame UnbindAction com o mesmo actionName.Você pode chamar manualmente a função de processamento de ação de uma ação usando CallFunction.

O exemplo de código abaixo mostra como um Sound pode ser played enquanto uma chave ( H ), botão do gamepad ou botão da tela de toque é pressionado.


local ContextActionService = game:GetService("ContextActionService")
-- Um som de buzina de carro
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 o jogador senta no veículo:
ContextActionService:BindAction("HonkHorn", handleAction, true, Enum.KeyCode.H, Enum.KeyCode.ButtonY)
-- Quando o jogador sai:
ContextActionService:UnbindAction("HonkHorn")

Parâmetros do Gerenciador de Ação

As funções do manipulador de ação são chamadas com os seguintes parâmetros:


<th>Tipo</th>
<th>Descrição</th>
</tr>
<tr>
<td>1</td>
<td><code>string / cadeia / texto</code></td>
<td>A mesma string que foi originalmente passada para BindAction†</td>
</tr>
<tr>
<td>2</td>
<td><code>Enum.UserInputState</code></td>
<td>O estado da entrada (Começar, Mudar, Finalizar ou Cancelar)*</td>
</tr>
<tr>
<td>3</td>
<td><code>Objeto de entrada</code></td>
<td>Um objeto que contém informações sobre a entrada (varia de acordo com o tipo de entrada do usuário)</td>
</tr>
#

† Isso permite que uma função lidar com várias ações de uma vez, se necessário.Cancelar é enviado se alguma entrada estiver em andamento e outra ação for vinculada à entrada em andamento, ou se a ação de vinculação em andamento fosse unbound.

Pilha de Vinculações de Ação

As ligações de ação se comportam como uma pilha: se duas ações forem vinculadas ao mesmo usuário de entrada, o mais recentemente vinculado manipulador de ação será usado.Se um manipulador de ação retornar Enum.ContextActionResult.Pass, o próximo manipulador de ação mais recentemente vinculado será chamado, e assim por diante até que um manipulador afunde a entrada (retornando nil ou Enum.ContextActionResult.Sink).Quando UnbindAction é chamado, o manipulador de ação é removido da pilha.Este comportamento de pilha pode ser substituído usando BindActionAtPriority, onde um parâmetro de prioridade adicional após createTouchButton pode substituir a ordem em que as ações são vinculadas (maior antes de menor).

Botões de Toque

Além dos tipos de entrada, o terceiro parâmetro desta função controla se um botão é criado para TouchEnabled .Após a criaçõesdo primeiro botão de toque, um ScreenGui chamado "ContextActionGui" é adicionado ao PlayerGui.Dentro do ScreenGui há um Frame chamado "ContextButtonFrame" que é adicionado.É neste quadro em que ImageButtons para ações vinculadas são parentadas; você pode usar GetButton para recuperar esses botões para personalização.

Parâmetros

actionName: string

Uma string que representa a ação que está sendo realizada (por exemplo, "HonkHorn" ou "OpenDoor").

Valor Padrão: ""
functionToBind: function

A função de manipulação de ação, chamada com os seguintes parâmetros quando os inputs vinculados forem acionados: string (actionName), Enum.UserInputState e um InputObject.

Valor Padrão: ""
createTouchButton: boolean

Se um botão GUI deve ser criado para a ação em dispositivos de entrada de toque.

Valor Padrão: ""
inputTypes: Tuple

Qualquer número de Enum.KeyCode ou Enum.UserInputType representando as entradas para vincular à ação.

Valor Padrão: ""

Devolução

()

Amostras de código

This example properly shows how to use ContextActionService in binding user input to a contextual action. The context is the tool being equipped; the action is reloading some weapon. Test this code sample by placing it in a LocalScript parented to a Tool. When the Tool is equipped, a "Reload" action is bound, and when the Tool is unequipped the "Reload" action is unbound. When the player presses R with the Tool equipped, the message "Reloading!" will appear.

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)

This code sample uses ContextActionService to bind an action named "BoundAction" to a general action handler function on the F key. Place this in a LocalScript inside StarterPlayerScripts and press F to see the message "Handling action: BoundAction".

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)

This code sample demonstrates how BindAction acts like a stack. It binds two actions, FirstAction (Z, X, and C keys) and SecondAction (Z and X keys) to two action handling functions. The second one will pass on a certain input (the X key).

Both actions use the Z and X keys, however the second handler will pass input only if X is pressed. So, when X is pressed, the second handler is called and then the first. The first action is also bound to the C key, and can be triggered even though the other two inputs are "covered" by the second action.

Test this code out by pasting it into a LocalScript within StarterPlayerScripts, then pressing Z, X and C. Observe which action handlers are called with what actions.

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

()

BindActionAtPriority se comporta como BindAction mas também permite que uma prioridade seja atribuída à ação vinculada.Se várias ações estiverem vinculadas ao mesmo input, a função de prioridade mais alta é chamada independentemente da ordem em que as ações foram vinculadas.Em outras palavras, essa função substitui o comportamento normal de "pilha" do BindAction.

Parâmetros

actionName: string

Uma string que representa a ação que está sendo realizada (por exemplo, "HonkHorn" ou "OpenDoor").

Valor Padrão: ""
functionToBind: function

A função de manipulação de ação, chamada com os seguintes parâmetros quando os inputs vinculados forem acionados: string (actionName), Enum.UserInputState e um InputObject.

Valor Padrão: ""
createTouchButton: boolean

Se um botão GUI deve ser criado para a ação em dispositivos de entrada de toque.

Valor Padrão: ""
priorityLevel: number

O nível de prioridade em que a ação deve ser vinculada (maior considerado antes de menor).

Valor Padrão: ""
inputTypes: Tuple

Qualquer número de Enum.KeyCode ou Enum.UserInputType representando os inputs para vincular à ação.

Valor Padrão: ""

Devolução

()

Amostras de código

This code sample demonstrates how ContextActionService:BindActionAtPriority() can be used to bind actions out of order yet still have the same priority levels. Normally, BindAction() would operate on order (last bound action has highest priority), but priority levels override this. You can test this code by pasting it into a Script with RunContext = Client in ReplicatedStorage.

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

()

Vincule um Enum.KeyCode que pode ser usado com um Enum.UserInputType para ativar ClickDetector eventos, Tools e GuiButtons.Quando a chave/botão dada é pressionada, ela dispara o evento Mouse.Button1Down no mouse enviado para Tool.Equipped .Isso, por sua vez, ativa o evento Tool.Activated se Tool.ManualActivationOnly não estiver definido como verdadeiro.Para a entrada do gamepad, esta função é chamada pelos scripts de controle padrão para vincular o BotãoR2 Enum.KeyCode .

Observe que o Enum.UserInputType especificado deve ser Keyboard ou Gamepad1 através de Gamepad8 para ser válido.

Parâmetros

userInputTypeForActivation: Enum.UserInputType

Deve ser Teclado ou Gamepad1 através do Gamepad8.

Valor Padrão: ""
keyCodesForActivation: Tuple
Valor Padrão: ""

Devolução

()

GetAllBoundActionInfo

GetAllBoundActioninfo retorna uma tabela que mapeia todos os nomes de ações (aqueles originalmente enviados para BindAction ) para uma tabela retornada por GetBoundActionInfo quando chamada com o próprio nome da ação.Usando essa função, você pode inspecionar todas as ações atualmente vinculadas.Isso é útil ao depurar seus níveis de prioridade ou ordens de pilha.


Devolução

GetBoundActionInfo

GetBoundActionInfo retorna uma tabela com as seguintes chaves que descrevem uma ação vinculada dada seu nome.Para obter a mesma informação para todas as ações de uma vez, use GetAllBoundActionInfo .


<th>Tipo</th>
<th>Descrição</th>
</tr>
<tr>
<td><code>ordem de pilha</code></td><td>número</td>
<td>
Descreve o índice da ação na pilha (aumentando)
</td>
</tr>
<tr>
<td><code>prioridadeLevel</code> \*</td><td>número</td>
<td>
Descreve o nível <code>Class.ContextActionService:BindActionAtPriority()|priority</code> da ação
</td>
</tr>
<tr>
<td><code>criar botão de toque</code></td><td>bool</td>
<td>
Descreve se um botão de toque deve ser criado em <code>Class.UserInputService.TouchEnabled|TouchEnabled</code> dispositivos
</td>
</tr>
<tr>
<td><code>tipos de entrada</code></td><td>tabela</td>
<td>
Os tipos de entrada passados para <code>Class.ContextActionService:BindAction()|BindAction</code> para o qual esta ação será gatilho
</td>
</tr>
<tr>
<td><code>descrição</code> †</td><td>string</td>
<td>
A descrição da ação definida por <code>Class.ContextActionService:SetDescription()|SetDescription</code>
</td>
</tr>
<tr>
<td><code>título</code> †</td><td>string</td>
<td>
O título do conjunto de ações definido por <code>Class.ContextActionService:SetTitle()|SetTitle</code>
</td>
</tr>
<tr>
<td><code>imagem</code> †</td><td>string</td>
<td>
A imagem do botão de toque da ação definido por <code>Class.ContextActionService:SetImage()|SetImage</code>
</td>
</tr>
Qual o nome

:* O nível de prioridade ainda será incluído mesmo se BindActionAtPriority não foi usado - por padrão, será 2000.

† Indica que este campo será nil se o método associado não foi chamado para a ação dada.

Parâmetros

actionName: string
Valor Padrão: ""

Devolução

GetCurrentLocalToolIcon

GetCurrentLocalToolIcon retornará o BackpackItem.TextureId de um Tool atualmente equipped pelo Player ou nil se não houver tal Ferramenta ou se o jogador não tiver uma Character .


Devolução

Uma string de conteúdo do ID da textura da ferramenta, ou nil se não puder ser encontrada.

SetDescription

()

SetDescription definirá a descrição de uma ação vinculada por BindAction.Em uma lista de ações disponíveis, este seria o texto que descreve a ação dada.

Embora o nome possa sugerir que esse método está relacionado à família de funções que personalizam um botão de toque para ações que os criam (SetTitle, SetImage e SetPosition), esse método não afeta um botão como esse.Este método apenas define uma descrição de texto de uma ação e nada mais.

Parâmetros

actionName: string

O nome da ação originalmente passada para BindAction.

Valor Padrão: ""
description: string

Uma descrição de texto da ação, como "Honk o chifre do carro" ou "Abrir o inventário".

Valor Padrão: ""

Devolução

()

Amostras de código

This code sample demonstrates binding an "Inspect" action to a touch button created automatically by ContextActionService. The button is customized using SetImage(), SetTitle(), SetDescription() and SetPosition(). The button is further customized by using GetButton() to get a reference to the ImageButton itself and tinting it green by setting ImageButton.ImageColor3.

Paste this code into a LocalScript placed within StarterPlayerScripts to test it. In Studio, be sure to toggle the touch device emulator in order for the button to actually be created.

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

()

Este método define a imagem exibida em um botão de toque criado por BindAction().Especificamente, define a propriedade ImageLabel.Image da do ImageLabel dentro do ImageButton que seria retornada pelo GetButton .Se não existe nenhuma ação vinculada assim (por exemplo,nada é retornado por GetButton), esta função não faz nada e não lança nenhum erro.

Essa função faz parte de uma família de métodos que personalizam o botão de toque de uma ação. Outros nessa família incluem SetPosition e SetTitle .

Parâmetros

actionName: string

O nome da ação originalmente passada para BindAction.

Valor Padrão: ""
image: string

O valor para o qual a propriedade Imagem deve ser configurar.

Valor Padrão: ""

Devolução

()

Amostras de código

This code sample demonstrates binding an "Inspect" action to a touch button created automatically by ContextActionService. The button is customized using SetImage(), SetTitle(), SetDescription() and SetPosition(). The button is further customized by using GetButton() to get a reference to the ImageButton itself and tinting it green by setting ImageButton.ImageColor3.

Paste this code into a LocalScript placed within StarterPlayerScripts to test it. In Studio, be sure to toggle the touch device emulator in order for the button to actually be created.

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

()

Este método define a posição de um botão de toque criado por BindAction().Especificamente, define a propriedade GuiObject.Position da do ImageButton que seria retornada pelo GetButton .Se não existe nenhuma ação vinculada assim (por exemplo,nada é retornado por GetButton), esta função não faz nada e não lança nenhum erro.

Essa função faz parte de uma família de métodos que personalizam o botão de toque de uma ação. Outros nessa família incluem SetImage e SetTitle .

Parâmetros

actionName: string

O nome da ação originalmente passada para BindAction.

Valor Padrão: ""
position: UDim2

A posição dentro do ContextButtonFrame.

Valor Padrão: ""

Devolução

()

Amostras de código

This code sample demonstrates binding an "Inspect" action to a touch button created automatically by ContextActionService. The button is customized using SetImage(), SetTitle(), SetDescription() and SetPosition(). The button is further customized by using GetButton() to get a reference to the ImageButton itself and tinting it green by setting ImageButton.ImageColor3.

Paste this code into a LocalScript placed within StarterPlayerScripts to test it. In Studio, be sure to toggle the touch device emulator in order for the button to actually be created.

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

()

O SetTitle definirá o texto exibido em um botão de toque criado por BindAction.Especificamente, isso define a propriedade TextLabel.Text de um TextLabel dentro do ImageButton que seria retornado por GetButton .Se não existe nenhuma ação vinculada assim (por exemplo,nada é retornado por GetButton), esta função não faz nada e não lança nenhum erro.

Essa função faz parte de uma família de métodos que personalizam o botão de toque de uma ação. Outros nessa família incluem SetImage e SetPosition .

Parâmetros

actionName: string

O nome da ação originalmente passada para BindAction.

Valor Padrão: ""
title: string

O texto a ser exibido no botão.

Valor Padrão: ""

Devolução

()

Amostras de código

This code sample demonstrates binding an "Inspect" action to a touch button created automatically by ContextActionService. The button is customized using SetImage(), SetTitle(), SetDescription() and SetPosition(). The button is further customized by using GetButton() to get a reference to the ImageButton itself and tinting it green by setting ImageButton.ImageColor3.

Paste this code into a LocalScript placed within StarterPlayerScripts to test it. In Studio, be sure to toggle the touch device emulator in order for the button to actually be created.

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

()

O UnbindAction desvinculará uma ação por nome dos inputs do usuário para que a função de processamento de ações não seja mais chamada.Chame essa função quando o contexto para alguma ação não for mais Aplicável, como fechar uma interface de usuário, sair de um carro ou unequipping de um Tool.Veja BindAction para mais informações sobre como as ações vinculadas operam.

Essa função não vai lançar um erro se não houver uma ação assim vinculada com a string / cadeia / textodada.Usando GetAllBoundActionInfo ou a aba "Action Bindings" do Console do Desenvolvedor, você pode descobrir quais ações estão atualmente vinculadas.

Parâmetros

actionName: string
Valor Padrão: ""

Devolução

()

Amostras de código

This example properly shows how to use ContextActionService in binding user input to a contextual action. The context is the tool being equipped; the action is reloading some weapon. Test this code sample by placing it in a LocalScript parented to a Tool. When the Tool is equipped, a "Reload" action is bound, and when the Tool is unequipped the "Reload" action is unbound. When the player presses R with the Tool equipped, the message "Reloading!" will appear.

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

()

DesvincularAtivar desvincula um Enum.KeyCode usado com um Enum.UserInputType para ativar um Tool (ou um HopperBin ) usando BindActivate .Essa função essencialmente desfaz a ação realizada por essa função.

Parâmetros

userInputTypeForActivation: Enum.UserInputType

O mesmo tipo de entrada de usuário originalmente enviado para BindActivate.

Valor Padrão: ""
keyCodeForActivation: Enum.KeyCode

O mesmo Código de Chave originalmente enviado para BindActivate.

Valor Padrão: "Unknown"

Devolução

()

UnbindAllActions

()

Remove todas as funções vinculadas.Nenhum actionName permanecerá. todos os botões de toque serão removidos.Se um botão foi manipulado manualmente, não há garantia de que ele será limpo.


Devolução

()

GetButton

Rendimentos

GetButton retorna o ImageButton criado por BindAction se seu terceiro parâmetro for verdadeiro e o dispositivo for TouchEnabled.O único parâmetro para essa função deve exatamente corresponder ao nome da ação originalmente enviada para BindAction.

Se nenhuma ação semelhante foi vinculada ou se um botão não foi criado, esta função retorna nil .

Parâmetros

actionName: string

O nome da ação originalmente passada para BindAction.

Valor Padrão: ""

Devolução

Um Botão de Imagem criado por BindAction.

Eventos

LocalToolEquipped

Incêndios quando o jogador atual equipa um Tool .

Parâmetros

toolEquipped: Instance

LocalToolUnequipped

Dispara quando o jogador atual desequipa um Tool .

Parâmetros

toolUnequipped: Instance