ContextActionService

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Création impossible
Service

Permet à une expérience de lier l'entrée de l'utilisateur à des actions contextuelles, ou des actions qui ne sont

Contexte et action

Un contexte est simplement une condition pendant laquelle un joueur peut effectuer une certaine action. Certains exemples incluent la tenue d'un Tool , le fait d'être Class.Seat|

Une action est simplement un action est un entr

Liaison des actions contextuellement

Il est

Inspection des actions de limite

Pour voir une liste d'actions et leurs entrées liées, vous pouvez inspecter l'onglet «Actions» dans la console de développeur (F9 pendant le jeu). Cela montre toutes les entrées, y compris celles liées par les scripts Rob

Entrée sans clavier

Ce service est spécialement utile pour prendre en charge la manette et l'entrée tactile. Pour la manette, vous pourriez choisir de lier le bouton B à une action qui renvoie l'utilisateur dans le menu précédent lorsqu'il entre dans un autre menu. Pour le toucher, les boutons

Échantillons de code

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)

Résumé

Méthodes

Évènements

Propriétés

Méthodes

BindAction

void

Lier une action à l'entrée d'un utilisateur donné une fonction de gestion d'action. Lorsqu'

L'exemple de code ci-dessous montre comment un Sound peut être played pendant qu'une touche ( H), un bouton de pad de jeu ou un bouton d'écran touché est appuyé.


local ContextActionService = game:GetService("ContextActionService")
-- Un son de clairon d'automobile
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
-- Lorsque le joueur se situe dans le véhicule :
ContextActionService:BindAction("HonkHorn", handleAction, true, Enum.KeyCode.H, Enum.KeyCode.ButtonY)
-- Lorsque le joueur sort :
ContextActionService:UnbindAction("HonkHorn")

Paramètres du gestionnaire d'action

Les fonctions d'action sont appelées avec les paramètres suivants :


<tr>
<td>1</td>
<td><code>chaîne</code></td>
<td>La même chaîne qui a été initialement passée à BindAction</td>
</tr>
<tr>
<td>2</td>
<td><code>État de l'entrée de l'utilisateur</code></td>
<td>L'état de l'entrée (Début, Changer, Fin ou Annuler)\*</td>
</tr>
<tr>
<td>3</td>
<td><code>Objet d'entrée</code></td>
<td>Un objet qui contient des informations sur l'entrée (selon le type d'entrée)</td>
</tr>
#TypeDescription

^ Cela permet à une fonction de gérer plusieurs actions à la fois, si nécessaire. * Annuler est envoyé si l'entrée est en cours et qu'une autre action est liée à l'entrée en cours, ou si l'entrée en cours est liée à unbound .

Pile de liens d'action

Les liens d

Boutons de touche

En plus des types d'entrée, ce paramètre de fonction contrôle si un bouton est créationspour les appareils Class.UserInputService.TouchEnabled|Touch

Paramètres

actionName: string

Une chaîne représentant l'action à exécuter (par exemple « HonkHorn » ou « OpenDoor »).

functionToBind: function

La fonction de gestion des actions, appelée avec les paramètres suivants lorsque les entrées liées sont déclenchées : string (actionName), Enum.UserInputState et un objet d'entrée.

createTouchButton: bool

Whether a GUI button should be created for the action sur les appareils d'entrée tactile.

inputTypes: Tuple

N'importe quel nombre de Enum.KeyCode ou Enum.UserInputType représentant les entrées à lier à l'action.


Retours

void

Échantillons de code

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 comporte comme BindAction mais permet également à une priorité d'être attribuée à l'action liée. Si plusieurs actions sont liées à la même entrée, la fonction de priorité la plus élevée est appelée indépendamment de l'ordre dans lequel les actions sont liées. En d'autres termes, cette fonction remplace le comportement normal de BindAction.

Paramètres

actionName: string

Une chaîne représentant l'action à exécuter (par exemple « HonkHorn » ou « OpenDoor »).

functionToBind: function

La fonction de gestion des actions, appelée avec les paramètres suivants lorsque les entrées liées sont déclenchées : string (actionName), Enum.UserInputState et un objet d'entrée.

createTouchButton: bool

Whether a GUI button should be created for the action sur les appareils d'entrée tactile.

priorityLevel: number

Le niveau de priorité auquel l'action doit être liée (le plus élevé est recommandé avant le plus bas).

inputTypes: Tuple

N'importe quel nombre d'Enum.KeyCode ou Enum.UserInputType représentant les entrées à lier à l'action.


Retours

void

Échantillons de code

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

L

Notez que le Enum.UserInputType spécifié doit être Keyboard ou Gamepad1 via 2>Gamepad82> pour être valide.

Paramètres

userInputTypeForActivation: Enum.UserInputType

Doit être Keyboard ou Gamepad1 via Gamepad8.

keyCodesForActivation: Tuple

Retours

void

GetAllBoundActionInfo

GetAllBindActioninfo renvoie une table qui mappe tous les noms d'action (celes qui sont initialement passés à BindAction ) à une table renvoyée par GetBoundActionInfo lorsqu'elle est appelée avec le nom d'action lui-même. En utilisant cette fonction, vous pouvez inspecter tous les actions actuellement liées. Ceci est utile


Retours

GetBoundActionInfo

GetBoundActionInfo renvoie une table avec les clés suivantes décrivant une action liée donnant son nom. Pour obtenir les mêmes informations pour toutes les actions à la fois, utilisez GetAllBoundActionInfo .


<tr>
<td><code>ordre de stackage</code></td>
<td>number</td>
<td>
Décrire l'index de l'action sur le stack (augmentation)
</td>
</tr>
<tr>
<td><code>niveau de priorité</code> \*</td>
<td>number</td>
<td>
Décrire le niveau de <code>Class.ContextActionService:BindActionAtPriority()|riorité</code> de l'action
</td>
</tr>
<tr>
<td><code>créer un bouton de touche</code></td>
<td>bulle</td>
<td>
Détermine si un bouton de touche doit être créé sur les appareils <code>Class.UserInputService.TouchEnabled|TouchEnabled</code>
</td>
</tr>
<tr>
<td><code>types d'entrée</code></td>
<td>table</td>
<td>
Les types d'entrée passés à <code>Class.ContextActionService:BindAction()|BindAction</code> pour lequel cette action se déclencheur
</td>
</tr>
<tr>
<td><code>description</code> ^</td>
<td>chaîne</td>
<td>
La description de l'action définie par <code>Class.ContextActionService:SetDescription()|SetDescription</code>
</td>
</tr>
<tr>
<td><code>titre</code> †</td>
<td>chaîne</td>
<td>
Titre de l'action défini par <code>Class.ContextActionService:SetTitle()|SetTitle</code>
</td>
</tr>
<tr>
<td><code>image</code> †</td>
<td>chaîne</td>
<td>
L'image du bouton de touche de l'action définie par <code>Class.ContextActionService:SetImage() | SetImage</code>
</td>
</tr>
NomTypeDescription

Le niveau de priorité sera toujours inclus même si BindActionAtPriority n'est pas utilisé - par défaut, il sera 2000.

^ Indique que ce champ sera nil si la méthode associée n'a pas été appelée pour l'action donnée.

Paramètres

actionName: string

Retours

GetCurrentLocalToolIcon

GetCurrentLocalToolIcon renverra le BackpackItem.TextureId d'un Tool actuellement equipped par le 1> Class.Player1> , ou 4> nil4> s'il n'y a pas de tel outil ou si le joueur manque un


Retours

Une chaîne de contenu à partir de l' Tool's TextureId, ou nil si on ne pouvait pas le trouver.

SetDescription

void

SetDescription définira la description d'une action liée par BindAction . Dans une liste de actions disponibles, ce serait du texte qui décrit l'action donnée.

Bien que le nom puisse suggérer que cette méthode est liée à la famille de fonctions qui personnalisent un bouton de touche pour les actions qui les créent ( SetTitle , SetImage et SetPosition), cette méthode n'

Paramètres

actionName: string

Le nom de l'action a d'abord été passé à BindAction.

description: string

Une description de texte de l'action, comme « Honk the car's horn » ou « Ouvrez l'inventaire ».


Retours

void

Échantillons de code

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

Cette méthode définit l'image affichée sur un bouton de touche créé par BindAction() . Spécifiquement, elle définit la propriété ImageLabel.Image de la ImageLabel

Cette fonction fait partie d'une famille de méthodes qui personnalisent le bouton de touche d'une action. D'autres dans cette famille incluent SetPosition et SetTitle .

Paramètres

actionName: string

Le nom de l'action a d'abord été passé à BindAction.

image: string

La valeur à laquelle la propriété image doit être configurer.


Retours

void

Échantillons de code

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

Cette méthode définit la position d'un bouton de touche créé par BindAction() . Spécifiquement, elle définit la propriété GuiObject.Position du bouton de touche qui serait renvoyé par ImageButton. Si une

Cette fonction fait partie d'une famille de méthodes qui personnalisent le bouton de touche d'une action. D'autres dans cette famille incluent SetImage et SetTitle .

Paramètres

actionName: string

Le nom de l'action a d'abord été passé à BindAction.

position: UDim2

La position dans le ContextButtonFrame.


Retours

void

Échantillons de code

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 définira le texte affiché sur un bouton de touche créé par BindAction . Spécifiquement, cela définira la propriété TextLabel.Text d'un TextLabel dans le <

Cette fonction fait partie d'une famille de méthodes qui personnalisent le bouton de touche d'une action. D'autres dans cette famille incluent SetImage et SetPosition .

Paramètres

actionName: string

Le nom de l'action a d'abord été passé à BindAction.

title: string

Le texte à afficher sur le bouton.


Retours

void

Échantillons de code

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 va désвязать une action par nom des entrées de l'utilisateur afin que le gestionnaire d'action ne soit plus appelé. Appuyez sur cette fonction lorsque le contexte pour une action n'est plus applicable, comme la fermeture d'une interface utilisateur, la sortie d'une voiture ou unequipping un Class.Tool. Voir Class.ContextAction

Cette fonction ne lancera pas d'erreur si il n'y a pas de telle action liée avec la chaîne donnée. En utilisant GetAllBoundActionInfo ou l'onglet «Actions» de la console de développeur, vous pouvez découvrir quelles actions sont actuellement liées.

Paramètres

actionName: string

Retours

void

Échantillons de code

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 un Enum.KeyCode (ou un Enum.UserInputType ) pour activer un Tool (ou un 1> Class.HopperBin1> ) en utilisant 4> Class.ContextActionService:BindActivate()|BindActivate4>. Cette fonction essaie essentiellement de rannuler l

Paramètres

userInputTypeForActivation: Enum.UserInputType

Le même UserInputType envoyé à BindActivate.

keyCodeForActivation: Enum.KeyCode

Le même KeyCode envoyé à BindActivate.

Valeur par défaut : "Unknown"

Retours

void

UnbindAllActions

void

Supprime toutes les fonctions liées. Aucun nom d'action ne restera. Tous les boutons de touche seront supprimés. Si un bouton est manipulé manuellement, il n'y a aucune garantie qu'il soit nettoyé.


Retours

void

GetButton

Rendement

GetButton renvoie le ImageButton créé par BindAction si son troisième paramètre était vrai et le dispositif était TouchEnabled . Le seul paramètre à cette fonction doit correspondre exactement au nom de l'action envoyée initialement à BindAction.

Si aucune telle action n'a été liée ou si un bouton n'a pas été créé, cette fonction renvoie nil .

Paramètres

actionName: string

Le nom de l'action a d'abord été passé à BindAction.


Retours

Un ImageButton créé par BindAction.

Évènements

LocalToolEquipped

Se déclenche lorsque le joueur actuel équipe un Tool .

Paramètres

toolEquipped: Instance

LocalToolUnequipped

Tire quand le joueur actuel se dééquipe d'un Tool.

Paramètres

toolUnequipped: Instance