ContextActionService
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
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
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
- BindAction(actionName : string,functionToBind : function,createTouchButton : bool,inputTypes : Tuple):void
Lier l'entrée de l'utilisateur à une action donnée par une fonction de gestion de l'action.
Comporte comme BindAction mais aussi permet d'assigner une priorité à l'action liée pour les types d'entrée interchangeables (haut avant bas).
Liez un Enum.KeyCode et Enum.UserInputType avec un Tool.Activation spécifique pour déclencher 2>Class.Tool.Activation2> et 5>Class.ClickDetector5> événements.
Obtenez une table d'informations sur toutes les actions liées (la clé est le nom donné à BindAction , la valeur est une table de GetBoundActionInfo lorsqu'elle est appelée avec la clé).
Obtenez une table d'informations sur une action liée donnée son nom initialement passé à BindAction .
Retournez le BackpackItem.TextureId d'un Tool actuellement equipped par le 1> Class.Player1>.
En fonction du nom d'une action avec un bouton de touche, définit la description de l'action.
Si la clé actionName contient une action liée, alors image est définie comme l'image du bouton de touche.
En raison du nom d'une action liée par un bouton de touche, détermine la position du bouton dans le ContextButtonFrame.
En fonction du nom d'une action liée par un bouton de touche, définit le texte affiché sur le bouton.
Définir une action à partir de son nom d'entrée.
- UnbindActivate(userInputTypeForActivation : Enum.UserInputType,keyCodeForActivation : Enum.KeyCode):void
Débind a Enum.KeyCode avec un Enum.UserInputType spécifique à partir du déclenchement de Tool.Activation lorsque lié à 1> Class.Tool.Activation1> .
Supprime toutes les fonctions liées. Aucun nom d'action ne restera. Tous les boutons de touche seront supprimés.
Récupère un ImageButton d'une action bound qui avait un bouton d'entrée tactile créé.
Évènements
Propriétés
Méthodes
BindAction
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>
# | Type | Description |
^ 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
Une chaîne représentant l'action à exécuter (par exemple « HonkHorn » ou « OpenDoor »).
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.
Whether a GUI button should be created for the action sur les appareils d'entrée tactile.
N'importe quel nombre de Enum.KeyCode ou Enum.UserInputType représentant les entrées à lier à l'action.
Retours
Échantillons de code
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 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
Une chaîne représentant l'action à exécuter (par exemple « HonkHorn » ou « OpenDoor »).
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.
Whether a GUI button should be created for the action sur les appareils d'entrée tactile.
Le niveau de priorité auquel l'action doit être liée (le plus élevé est recommandé avant le plus bas).
N'importe quel nombre d'Enum.KeyCode ou Enum.UserInputType représentant les entrées à lier à l'action.
Retours
Échantillons de code
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
L
Notez que le Enum.UserInputType spécifié doit être Keyboard ou Gamepad1 via 2>Gamepad82> pour être valide.
Paramètres
Doit être Keyboard ou Gamepad1 via Gamepad8.
Retours
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>
Nom | Type | Description |
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
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
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
Le nom de l'action a d'abord été passé à BindAction.
Une description de texte de l'action, comme « Honk the car's horn » ou « Ouvrez l'inventaire ».
Retours
Échantillons de code
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
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
Le nom de l'action a d'abord été passé à BindAction.
La valeur à laquelle la propriété image doit être configurer.
Retours
Échantillons de code
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
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
Le nom de l'action a d'abord été passé à BindAction.
La position dans le ContextButtonFrame.
Retours
Échantillons de code
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 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
Le nom de l'action a d'abord été passé à BindAction.
Le texte à afficher sur le bouton.
Retours
Échantillons de code
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 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
Retours
Échantillons de code
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 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
Le même UserInputType envoyé à BindActivate.
Le même KeyCode envoyé à BindActivate.
Retours
UnbindAllActions
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
GetButton
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
Le nom de l'action a d'abord été passé à BindAction.
Retours
Un ImageButton créé par BindAction.