ContextActionService
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
Ermöglicht es einer Erfahrung, Benutzereingaben an kontextbezogene Aktionen oder Aktionen zu binden, die nur unter einer Bedingung oder einem Zeitraum aktiviert sind.Zum Beispiel, einen Spieler nur dann eine Tür öffnen zu lassen, wenn er in der Nähe ist.Im Codesist eine Aktion einfach ein String (der Name der Action), der vom Dienst verwendet wird, um eindeutige Aktionen zu unterscheiden.Die Aktionszeichenfolge wird an BindAction und UnbindAction übergeben, unter anderem an andere Mitgliederfunktionen.Wenn zwei Aktionen mit demselben Eingang gebunden sind, erhält die neueste gebundene Priorität.Wenn die neueste Aktion nicht gebunden ist, übernimmt die zuvor gebundene wieder die Kontrolle.Da dieser Service sich mit der Eingabe des Benutzers beschäftigt, kannst du ihn nur auf clientseitiger Ebene verwenden LocalScripts .
Kontext und Aktion
Ein Kontext ist einfach eine Bedingung, unter der ein Spieler eine Actionausführen kann.Einige Beispiele umfassen das Halten einer Tool , das Sein von seated in einem Auto oder das Stehen in der Nähe einer Tür.Was auch immer der Fall sein mag, es liegt an deinem LocalScripts, BindAction anzurufen, wenn der Kontext eingegeben wird, und UnbindAction, wenn der Kontext verlassen wird.
Eine Aktion ist einfach nur eine Eingabe, die vom Spieler durchgeführt werden kann, während er sich in diesem Kontext befindet.Eine solche Aktion könnte ein Menü öffnen/schließen, eine sekundäre Werkzeugaktion auslösen oder eine Anfrage an den Server senden, die mit RemoteFunction:InvokeServer() verwendet wird.Eine Aktion wird durch eine eindeutige Zeichenkette als erster Parameter von both BindAction und UnbindAction identifiziert.Die Zeichenkette kann alles sein, aber sie sollte die Aktion widerspiegeln, die ausgeführt wird, nicht die Eingabe, die verwendet wird .Verwende beispielsweise nicht "KeyH" als Aktionsname - verwende stattdessen "CarHorn".Es ist am besten, deine Aktionen als Konstante ganz oben in deinem Skript zu definieren, da du sie in mindestens drei verschiedenen Orten in deinem Codesverwenden wirst.
Aktionen kontextbezogen binden
Es ist besser, ContextActionService's BindAction für die meisten Fälle zu verwenden, als UserInputService.InputBegan für die meisten Fälle.Für UserInputService.InputBegan muss deine verbundene Funktion überprüfen, ob der Spieler im Kontext der durchgeführten Aktion ist.In den meisten Fällen ist dies schwieriger als nur eine Funktion aufzurufen, wenn ein Kontext eingegeben/verlassen wird.Wenn du beispielsweise möchtest, dass die H-Taste einen Autolautstoß auslöst, während der Spieler darin sitzt, kann der Spieler "hello" im Chat eingeben oder mit der H-Taste etwas anderes verwenden.Es ist schwieriger zu bestimmen, ob etwas anderes die H-Taste verwendet (wie Chat) - das Auto könnte piepen, wenn der Spieler es nicht beabsichtigt hat.Wenn du stattdessen BindAction und UnbindAction verwendest, wenn der Spieler das Auto betritt/verlässt, wird ContextActionService sicherstellen, dass die Taste H nur dann die Honk-Aktion auslöst, wenn sie die zuletzt gebundene Aktion ist.Wenn etwas anderes (z. B. Chat) die Kontrolle übernimmt, musst du dir keine Sorgen machen, das zu überprüfen.
Verifizieren von gebundenen Aktionen
Um eine Liste der Aktionen und ihrer gebundenen Eingänge zu sehen, kannst du die Registerkarte "Aktionenbindungen" in der Entwickler-Konsole inspizieren (F9 während des Spiels).Dies zeigt alle Bindungen, einschließlich der von Roblox-Kernskripten und Standard-Kamera-/Steuerskripten gebundenen auch.Dies ist nützlich für die Fehlersuche, wenn deine Aktionen zur richtigen Zeit gebunden/entfernt werden oder wenn eine andere Aktion die Eingabe von deinen Aktionen stiehlt.Wenn du beispielsweise versuchst, WASD zu binden, kann es der Fall sein, dass Standard-Zeichenbewegungs-Skripte über dieselben Schlüssel gebunden sind.Ebenso kann das Kamerasteuerungskript die rechte Maouseingabe stehlen, wenn das Skript nach dem Ihres ausgeführt wird.
Tastaturlose Eingabe
Dieser Service ist besonders nützlich für die Unterstützung von Gamepad- und Touch-Eingabe.Für die Gamepad-Eingabe können Sie sich dafür entscheiden, die B-Taste mit einer Aktion zu verbinden, die den Benutzer in das vorherige Menü zurückbringt, wenn er in ein anderes Menü eintritt.Für die Berührung können auf-Bildschirm-Touch-Buttons anstelle von Tastendrücken verwendet werden: Diese Schaltflächen werden nur angezeigt, während die Aktion gebunden ist, und die Position, der Text und/oder Bilder dieser Schaltflächen können über diesen Service konfiguriert werden.Sie sind etwas begrenzt in der Menge der Anpassung, die dieser Service bietet; es ist in der Regel eine bessere Idee, eigene Schaltflächen auf dem Bildschirm mit ImageButton oder TextButton zu erstellen.
Code-Beispiele
Dieses Beispiel zeigt richtig, wie man ContextActionService verwendet, um Benutzereingabe in einen kontextbezogenen Aktion zu binden.Der Kontext ist das Werkzeug, das ausgerüstet wird; die Aktion ist die Neuladung einer Waffe.Teste dieses Codebeispiel, indem du es in einem LocalScript platzierst, das einem Werkzeug zugewiesen ist.Wenn das Werkzeug ausgerüstet ist, wird eine Aktion "Neu laden" gebunden, und wenn das Werkzeug nicht ausgerüstet ist, wird die Aktion "Neu laden" entfernt.Wenn der Spieler mit dem Werkzeug ausgerüstet R drückt, wird die Nachricht "Wiederladen!" angezeigt.
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)
Zusammenfassung
Methoden
- BindAction(actionName : string,functionToBind : function,createTouchButton : boolean,inputTypes : Tuple):()
Binden Sie die Eingabe eines Benutzers an eine Aktion, die eine Aktionshandlungsfunktion erhalten hat.
Verhält sich wie BindAction aber erlaubt auch, einer Priorität für die gebundene Aktion für überlappende Eingabetypen zuzuweisen (höher vor niedriger).
Binden Sie ein Enum.KeyCode mit einem bestimmten Enum.UserInputType an, um Tool.Activation und ClickDetector Ereignisse auszulösen.
Holen Sie sich eine Tabelle mit Informationen über alle gebundenen Aktionen (der Schlüssel ist der Name, der an BindAction übergeben wird, der Wert ist eine Tabelle von GetBoundActionInfo, wenn er mit dem Schlüssel aufgerufen wird).
Holen Sie sich eine Tabelle mit Informationen über eine gebundene Aktion, die ursprünglich an BindAction übergeben wurde.
Geben Sie die eines derzeit durch die zurück.
Angesichts des Namens einer gebundenen Aktion mit einem Touch-Button legt sie die Beschreibung der Actionfest.
Wenn der Schlüssel actionName eine gebundene Actionenthält, wird image als Bild des Touch buttons festgelegt.
Angesichts des Namens einer gebundenen Aktion mit einem Touch-Button legt es die Position des Buttons innerhalb des ContextButtonFrame fest.
Angesichts des Namens einer gebundenen Aktion mit einem Touch-Button legt es den Text fest, der auf der Schaltfläche angezeigt wird.
Entferne eine Aktion von der Eingabe, wenn ihr Name gegeben wird.
- UnbindActivate(userInputTypeForActivation : Enum.UserInputType,keyCodeForActivation : Enum.KeyCode):()
Entferne ein Enum.KeyCode mit einem bestimmten Enum.UserInputType von der Auslösung von Tool.Activation, wenn es mit ContextActionService:BindActivate() gebunden ist.
Entfernt alle gebundenen Funktionen. Es bleiben keine Aktionennamen übrig. Alle Touch-Buttons werden entfernt.
Ruft ein ImageButton von einer bound Aktion ab, die einen Touch-Eingabe-Button erstellt hatte.
Ereignisse
Eigenschaften
Methoden
BindAction
Binden Sie eine Aktion an die Eingabe des Benutzers, gegeben eine Aktion-Handlingsfunktion.Wenn eine passende Eingabe ausgeführt wird, wird die Aktion-Handler-Funktion mit den im Folgenden aufgelisteten Argumenten aufgerufen.Gültige Eingabeelemente umfassen die gefolgte Profile: Enum.KeyCode, Enum.UserInputType oder Enum.PlayerActions.Rufe diese Funktion auf, wenn ein Spieler den Kontext betritt , in dem eine Aktion ausgeführt werden kann.Wenn der Spieler den Kontext verlässt, rufe UnbindAction mit demselben actionName an.Du kannst die Aktion-Handlungsfunktion einer Aktion manuell aufrufen, indem du CallFunction verwendest.
Das Codebeispiel unten zeigt, wie ein Sound kann played werden, während ein Schlüssel ( H ), Spielpad-Taste oder Touchscreen-Taste gedrückt wird.
local ContextActionService = game:GetService("ContextActionService")
-- Ein Autohorngeräusch
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
-- Wenn der Spieler im Fahrzeug sitzt:
ContextActionService:BindAction("HonkHorn", handleAction, true, Enum.KeyCode.H, Enum.KeyCode.ButtonY)
-- Wenn der Spieler herauskommt:
ContextActionService:UnbindAction("HonkHorn")
Aktion-Handler-Parameter
Die Aktion-Handler-Funktionen werden mit den folgenden Parametern aufgerufen:
<th>Typ</th><th>Beschreibung</th></tr><tr><td>1</td><td><code>string</code></td><td>Der gleiche String, der ursprünglich an BindAction† übergeben wurde</td></tr><tr><td>2</td><td><code>Enum.UserInputState</code></td><td>Der Zustand der Eingabe (Beginnen, Ändern, Beenden oder Abbrechen)*</td></tr><tr><td>3</td><td><code>Eingabeelement</code></td><td>Ein Objekt, das Informationen über die Eingabe enthält (je nach UserInputType unterschiedlich)</td></tr>
# |
† Dies ermöglicht es einer Funktion, mehrere Aktionen gleichzeitig zu bearbeiten, wenn nötig.:* Abbruch wird gesendet, wenn irgendeine Eingabe im Gange ist und eine andere Aktion über die im Gange befindliche Eingabe gebunden ist, oder wenn die im Gange befindliche Bindungsaktion unbound war.
Aktionen-Bindungen-Stack
Aktionen-Bindungen verhalten sich wie ein Stapel: Wenn zwei Aktionen mit demselben Benutzereingabe gebunden sind, wird der neuest gebundene Aktion-Handler verwendet.Wenn ein Aktionshändler Enum.ContextActionResult.Pass zurückgibt, wird der nächste am häufigsten gebundene Aktionshändler angerufen, und so weiter, bis ein Handler die Eingabe sinkt (durch die Rückgabe von nil oder Enum.ContextActionResult.Sink ).Wenn UnbindAction aufgerufen wird, wird der Aktionshändler aus dem Stapel entfernt.Dieses Stapelverhalten kann mit BindActionAtPriority überschrieben werden, wo ein zusätzlicher Prioritäten参数 nach createTouchButton die Reihenfolge überstellen kann, in der Aktionen gebunden sind (höher vor niedriger).
BerührungsButtons
Zusätzlich zu Eingabetypen steuert der dritte Parameter dieser Funktion, ob ein Button für TouchEnabled erstellt wird.Bei der Schöpfungdes ersten Berührungsknopfes wird ein ScreenGui namens "ContextActionGui" zum PlayerGui hinzugefügt.Innerhalb des ScreenGui wird ein Frame namens "ContextButtonFrame" hinzugefügt, der aufgerufen wird.Es ist in diesem Rahmen, in dem ImageButtons für gebundene Aktionen gesponsort werden; du kannst GetButton verwenden, um solche Schaltflächen für die Anpassung zu erhalten.
Parameter
Eine Zeichenfolge, die die ausgeführte Aktion repräsentiert (z. B. "HonkHorn" oder "OpenDoor").
Die Aktion-Handhabungsfunktion, die mit den folgenden Parametern aufgerufen wird, wenn gebundene Eingänge ausgelöst werden: string (actionName), Enum.UserInputState und ein InputObject.
Ob ein GUI-Button für die Aktion auf Touch-Eingabegeräten erstellt werden sollte.
Jede Anzahl von Enum.KeyCode oder Enum.UserInputType, die die Eingänge repräsentieren, die mit der Actiongebunden werden sollen.
Rückgaben
Code-Beispiele
Dieses Beispiel zeigt richtig, wie man ContextActionService verwendet, um Benutzereingabe in einen kontextbezogenen Aktion zu binden.Der Kontext ist das Werkzeug, das ausgerüstet wird; die Aktion ist die Neuladung einer Waffe.Teste dieses Codebeispiel, indem du es in einem LocalScript platzierst, das einem Werkzeug zugewiesen ist.Wenn das Werkzeug ausgerüstet ist, wird eine Aktion "Neu laden" gebunden, und wenn das Werkzeug nicht ausgerüstet ist, wird die Aktion "Neu laden" entfernt.Wenn der Spieler mit dem Werkzeug ausgerüstet R drückt, wird die Nachricht "Wiederladen!" angezeigt.
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".
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.
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 verhält sich wie BindAction, ermöglicht aber auch, dass der gebundene Aktion eine Priorität zugewiesen wird.Wenn mehrere Aktionen mit demselben Eingang gebunden sind, wird die höhere Prioritätsfunktion unabhängig von der Reihenfolge der Bindung der Aktionen aufgerufen.Mit anderen Worten, diese Funktion überschreibt das normale "Stack"-Verhalten von BindAction.
Parameter
Eine Zeichenfolge, die die ausgeführte Aktion repräsentiert (z. B. "HonkHorn" oder "OpenDoor").
Die Aktion-Handhabungsfunktion, die mit den folgenden Parametern aufgerufen wird, wenn gebundene Eingänge ausgelöst werden: string (actionName), Enum.UserInputState und ein InputObject.
Ob ein GUI-Button für die Aktion auf Touch-Eingabegeräten erstellt werden sollte.
Die Prioritätsstufe, auf der die Aktion gebunden werden sollte (höher als niedriger angesehen).
Jede Anzahl von Enum.KeyCode oder Enum.UserInputType, die die Eingänge repräsentieren, die mit der Actiongebunden werden sollen.
Rückgaben
Code-Beispiele
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.
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
Binden Sie ein Enum.KeyCode, das mit einem Enum.UserInputType verwendet werden kann, um ClickDetector Ereignisse, Tools und GuiButtons zu aktivieren.Wenn der angegebene Schlüssel/Button gedrückt wird, wird das Mouse.Button1Down Ereignis auf der Maus abgefeuert, die an Tool.Equipped gesendet wurde.Dies wiederum aktiviert das Ereignis Tool.Activated, wenn Tool.ManualActivationOnly nicht auf wahr gesetzt ist.Für die Gamepad-Eingabe wird diese Funktion von den Standard-Steuerskripten aufgerufen, um den ButtonR2 Enum.KeyCode zu binden.
Beachten Sie, dass die Enum.UserInputType angegebene muss Keyboard oder Gamepad1 durch Gamepad8 sein, um gültig zu sein.
Parameter
Muss Tastatur oder Gamepad1 durch Gamepad8 sein.
Rückgaben
GetAllBoundActionInfo
GetAllBoundActioninfo gibt eine Tabelle zurück, die alle Namen von Aktionen (die ursprünglich an BindAction übergeben wurden) auf eine Tabelle zurückmappt, die von GetBoundActionInfo zurückgegeben wird, wenn die Aktion mit dem Aktionsnamen selbst aufgerufen wird.Mit dieser Funktion können Sie alle derzeit gebundenen Aktionen inspizieren.Dies ist nützlich, wenn Sie ihre Prioritätsstufen oder Stapelaufträge debuggen.
Rückgaben
GetBoundActionInfo
GetBoundActionInfo gibt eine Tabelle mit den folgenden Schlüsseln zurück, die eine gebundene Aktion beschreiben, die mit ihrem Namen gegeben wurde.Um die gleichen Informationen für alle Aktionen auf einmal zu erhalten, verwende GetAllBoundActionInfo.
<th>Typ</th><th>Beschreibung</th></tr><tr><td><code>Stapelordnung</code></td><td>Zahl</td><td>Beschreibt den Index der Aktion auf dem Stapel (zunehmend)</td></tr><tr><td><code>prioritätsstufe</code> \*</td><td>zahl</td><td>Beschreibt die <code>Class.ContextActionService:BindActionAtPriority()|priority</code> Ebene der Aktion</td></tr><tr><td><code>createTouchButton</code></td><td>bool</td><td>Beschreibt, ob ein Touch-Button auf <code>Class.UserInputService.TouchEnabled|TouchEnabled</code> Geräten erstellt werden soll</td></tr><tr><td><code>Eingabetypen</code></td><td>Tabelle</td><td>Die Eingabetypen, die an <code>Class.ContextActionService:BindAction()|BindAction</code> übergeben wurden, für die diese Aktion Auslöser</td></tr><tr><td><code>beschreibung</code> †</td><td>zeichen</td><td>Die Beschreibung der Aktion, die von <code>Class.ContextActionService:SetDescription()|SetDescription</code> festgelegt wurde</td></tr><tr><td><code>titel</code> †</td><td>sicherheitsstring</td><td>Der Titel der Aktion, die von <code>Class.ContextActionService:SetTitle()|SetTitle</code> festgelegt wurde</td></tr><tr><td><code>bild</code> †</td><td>sicherung</td><td>Das Bild des Touch buttons der Aktion, das von <code>Class.ContextActionService:SetImage()|SetImage</code> festgelegt wurde</td></tr>
Namen |
:* Der Prioritätenlevel wird immer noch enthalten sein, auch wenn BindActionAtPriority nicht verwendet wurde - standardmäßig wird es 2000 sein.
† Zeigt an, dass dieses Feld nil sein wird, wenn die zugeordnete Methode für die angegebene Actionnicht aufgerufen wurde.
Parameter
Rückgaben
GetCurrentLocalToolIcon
GetCurrentLocalToolIcon wird die BackpackItem.TextureId eines Tool derzeit equipped durch die Player oder nil zurückgeben, wenn es kein solches Werkzeug gibt oder der Spieler kein Character hat.
Rückgaben
Ein Inhaltsstring aus der Textur-ID des Tools oder nil, wenn keiner gefunden werden konnte.
SetDescription
SetDescription wird die Beschreibung einer Aktion festlegen, die durch BindAction gebunden ist.In einer Liste der verfügbaren Aktionen wäre dies Text, der die angegebene Actionbeschreibt.
Obwohl der Name suggerieren kann, dass diese Methode mit der Familie von Funktionen zusammenhängt, die einen Touch-Button für Aktionen anpassen, die sie erzeugen ( SetTitle , SetImage und SetPosition ), betrifft diese Methode keinen solchen Knopf.Diese Methode legt nur eine Textbeschreibung einer Actionfest und nichts mehr.
Parameter
Der Name der Aktion, die ursprünglich an BindAction übergeben wurde.
Eine Textbeschreibung der Action, wie z. B. "Honk das Horn des Autos" oder "Öffne das Inventar".
Rückgaben
Code-Beispiele
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.
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
Diese Methode legt das Bild fest, das auf einem durch BindAction() erstellten Touch-Button angezeigt wird.Speziell legt es die Eigenschaft ImageLabel.Image des ImageLabel innerhalb der ImageButton, die von GetButton zurückgegeben würde, fest.Wenn keine solche gebundene Aktion existiert (z. B.nichts wird durch GetButton zurückgegeben), diese Funktion tut nichts und wirft keine Fehler.
Diese Funktion ist Teil einer Familie von Methoden, die den Touch-Button einer Actionanpassen. Andere in dieser Familie sind SetPosition und SetTitle.
Parameter
Der Name der Aktion, die ursprünglich an BindAction übergeben wurde.
Der Wert, auf den die Bild-Eigenschaft festlegenwerden sollte.
Rückgaben
Code-Beispiele
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.
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
Diese Methode legt die Position eines Touch buttons fest, der von BindAction() erstellt wurde.Speziell legt es die Eigenschaft GuiObject.Position des ImageButton, die von GetButton zurückgegeben würde, fest.Wenn keine solche gebundene Aktion existiert (z. B.nichts wird durch GetButton zurückgegeben), diese Funktion tut nichts und wirft keine Fehler.
Diese Funktion ist Teil einer Familie von Methoden, die den Touch-Button einer Actionanpassen. Andere in dieser Familie sind SetImage und SetTitle.
Parameter
Der Name der Aktion, die ursprünglich an BindAction übergeben wurde.
Die Position innerhalb des ContextButtonFrame.
Rückgaben
Code-Beispiele
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.
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 wird den Text festlegen, der auf einem durch BindAction erstellten Touch-Button angezeigt wird.Speziell legt dies das Eigenschaft TextLabel.Text von einem TextLabel innerhalb der ImageButton, die von GetButton zurückgegeben würde.Wenn keine solche gebundene Aktion existiert (z. B.nichts wird durch GetButton zurückgegeben), diese Funktion tut nichts und wirft keine Fehler.
Diese Funktion ist Teil einer Familie von Methoden, die den Touch-Button einer Actionanpassen. Andere in dieser Familie sind SetImage und SetPosition.
Parameter
Der Name der Aktion, die ursprünglich an BindAction übergeben wurde.
Der Text, der auf der Schaltfläche angezeigt wird.
Rückgaben
Code-Beispiele
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.
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 wird eine Aktion durch Namen von Benutzereingaben von der Aktion entfernen, so dass die Aktion Handler-Funktion nicht mehr aufgerufen wird.Rufe diese Funktion auf, wenn der Kontext für eine Aktion nicht mehr geltendist, wie das Schließen einer Benutzeroberfläche, das Verlassen eines Autos oder unequipping eines Tool.Siehe BindAction für weitere Informationen darüber, wie gebundene Aktionen funktionieren.
Diese Funktion wirft keinen Fehler, wenn es keine solche Aktion mit dem angegebenen String gibt, die gebunden ist .Mit GetAllBoundActionInfo oder der Registerkarte "Aktionen der Entwicklerkonsole" kannst du herausfinden, welche Aktionen derzeit gebunden sind.
Parameter
Rückgaben
Code-Beispiele
Dieses Beispiel zeigt richtig, wie man ContextActionService verwendet, um Benutzereingabe in einen kontextbezogenen Aktion zu binden.Der Kontext ist das Werkzeug, das ausgerüstet wird; die Aktion ist die Neuladung einer Waffe.Teste dieses Codebeispiel, indem du es in einem LocalScript platzierst, das einem Werkzeug zugewiesen ist.Wenn das Werkzeug ausgerüstet ist, wird eine Aktion "Neu laden" gebunden, und wenn das Werkzeug nicht ausgerüstet ist, wird die Aktion "Neu laden" entfernt.Wenn der Spieler mit dem Werkzeug ausgerüstet R drückt, wird die Nachricht "Wiederladen!" angezeigt.
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 aktiviert eine Enum.KeyCode mit einer Enum.UserInputType zum Aktivieren einer Tool (oder einer HopperBin ) mit BindActivate .Diese Funktion macht im Wesentlichen die von dieser Funktion durchgeführte Aktion rückgängig.
Parameter
Der gleiche UserInputType, der ursprünglich an BindActivate gesendet wurde.
Der gleiche Schlüsselcode, der ursprünglich an BindActivate gesendet wurde.
Rückgaben
UnbindAllActions
Entfernt alle gebundenen Funktionen.Es bleiben keine Aktionenamen übrig.Alle Touch-Buttons werden entfernt.Wenn ein Button manuell manipuliert wurde, gibt es keine Garantie, dass er gereinigt wird.
Rückgaben
GetButton
GetButton gibt die ImageButton zurück, die von BindAction erstellt wurde, wenn ihr dritter Parameter wahr war und das Gerät TouchEnabled ist.Der einzige Parameter für diese Funktion muss genau dem Namen der Aktion entsprechen, die ursprünglich an BindAction gesendet wurde.
Wenn keine solche Aktion gebunden wurde oder wenn ein Button nicht erstellt wurde, gibt diese Funktion nil zurück.
Parameter
Der Name der Aktion, die ursprünglich an BindAction übergeben wurde.
Rückgaben
Ein Bild-Button, der von BindAction erstellt wurde.