ContextActionService
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Pozwala doświadczeniu wiązać wejście użytkownika z działaniami kontekstowymi lub działaniami, które są włączone tylko pod pewnymi warunkami lub okresem czasu.Na przykład, pozwalając graczowi otworzyć drzwi tylko wtedy, gdy jest blisko.W kodzie akcja jest po prostu ciągiem (nazwą akcji) używanym przez usługę do rozróżniania unikalnych akcji.Sznurek akcji jest dostarczany do BindAction i UnbindAction , wśród innych funkcji członkowskich.Jeśli dwie akcje są powiązane z tym samym wejściem, najnowsza z nich będzie miała pierwszeństwo.Gdy najnowsza akcja jest rozwiązana, ta, która była wiązana przed nią, ponownie przejmuje kontrolę.Ponieważ ta usługa zajmuje się wejściem użytkownika, możesz jej używać tylko na stronie klienta LocalScripts.
Kontekst i akcja
Kontekst jest po prostu warunkiem, w którym gracz może wykonać jakąś akcji. Niektóre przykłady obejmują trzymanie Tool, bycie seated w samochodzie lub stanie w pobliżu drzwi.Bez względu na przypadek, to od twojego LocalScripts zależy wezwanie BindAction gdy kontekst zostanie wpisany i UnbindAction gdy kontekst zostanie opuszczony.
Akcja jest po prostu jakimś wejściem, które może wykonać gracz w tym kontekście .Taka akcja może otworzyć/zamknąć menu, uruchomić akcję narzędzia wtórnego lub wysłać żądanie do serwera za pomocą RemoteFunction:InvokeServer().Akcja jest identyfikowana przez unikalną strunę jako pierwszy parametr obu BindAction i UnbindAction.Sznurek może być czymkolwiek, ale powinien odzwierciedlać wykonywaną akcję oraz nie używaną wejściową .Na przykład, nie używaj "KeyH" jako nazwy akcji - użyj zamiast tego "CarHorn".Najlepiej określić swoje działania jako stałą na górze swojego skryptu, ponieważ będziesz go używać w co najmniej trzech różnych miejscach w swoim kodzie.
Wiązanie akcji kontekstowo
Lepszym rozwiązaniem jest użycie BindAction niż UserInputService.InputBegan w większości przypadków.Dla UserInputService.InputBegan twoja połączona funkcja musiałaby sprawdzić, czy gracz znajduje się w kontekście wykonywanej akcji.W większości przypadków jest to trudniejsze niż po prostu wezwanie funkcji, gdy kontekst zostanie wpisany/opuszczony.Na przykład, jeśli chcesz, aby klawisz H uruchomił dźwięk syreny samochodowej, gdy gracz siedzi w nim, gracz może wpisać "cześć" w czacie lub używać klawisza H do czegoś innego.Trudniej jest ustalić, czy coś innego używa klucza H (jak czat) - samochód może zatrąbić, gdy gracz nie miał zamiaru.Jeśli zamiast tego użyjesz BindAction i UnbindAction gdy gracz wsiada/wychodzi z samochodu, ContextActionService upewni się, że naciśnięcie klawisza H uruchomi akcję klaksonu tylko wtedy, gdy jest to najbardziej ostatnio wiązana akcja.Jeśli coś innego (jak czat) przejmie kontrolę, nie będziesz musiał się martwić o sprawdzenie tego.
Sprawdzanie działań związanych z granicą
Aby zobaczyć listę działań i ich przypisanych wejść, możesz sprawdzić zakładkę "Wiązania akcji" w konsoli programisty (F9 podczas gry).Pokazuje to wszystkie wiązania, w tym te wiązane przez skrypty rdzenia Roblox i domyślne skrypty kamery/sterowania również.Jest to przydatne do debugowania, jeśli twoje działania są wiązane/odwiązywane we właściwym czasie lub jeśli jakaś inna akcja kradnie wejście z twoich działań.Na przykład, jeśli próbujesz wiązać WASD , może się zdarzyć, że domyślne skrypty ruchu postaci wiążą się z tymi samymi klawiszami.Podobnie skrypt kontroli kamery może ukraść wpis poprzez prawy klik, jeśli skrypt uruchamia się po twoim.
Bezprzewodowe wpisanie klawiatury
Ta usługa jest szczególnie przydatna do wspierania gamepada i wejścia dotykowego.W przypadku wpisu na gamepad możesz wybrać przypisanie przycisku B do akcji, która przenosi użytkownika do poprzedniego menu, gdy wchodzą do innego menu.Do dotknięcia przyciski dotykowe na ekranie mogą być używane w miejsce naciśnięcia klawiszy: te przyciski wyświetlają się tylko wtedy, gdy akcja jest powiązana, a pozycja, tekst i/lub obrazy tych przycisków mogą być skonfigurowane za pośrednictwem tej usługi.Są ograniczone w ilości dostosowania zapewnianej przez tę usługę; zwykle lepszym pomysłem jest tworzenie własnych przycisków na ekranie za pomocą ImageButton lub TextButton.
Przykłady kodu
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.
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)
Podsumowanie
Metody
- BindAction(actionName : string,functionToBind : function,createTouchButton : boolean,inputTypes : Tuple):()
Połącz wejście użytkownika z akcją, która otrzyma funkcję obsługi akcji.
Zachowuje się jak BindAction ale pozwala również przypisać priorytet do wiązanej akcji dla pokrywających się typów wejściowych (pierwszy najwyższy przed najniższym).
Wiąż Enum.KeyCode z określonym Enum.UserInputType uruchomieniem wydarzeń Tool.Activation i ClickDetector.
Zdobądź tabelę informacji o wszystkich związanych działaniach (klucz to nazwa przekazana do BindAction, wartość to tabela z GetBoundActionInfo , gdy jest wzywana za pomocą klucza).
Zdobądź tabelę informacji o związanej akcji, podanej jej nazwie pierwotnie przekazanej do BindAction .
Zwróć BackpackItem.TextureId z Tool obecnie equipped przez Player.
Biorąc pod uwagę nazwę związanego działania z przyciskiem dotykowym, ustawia opis akcji.
Jeśli klucz actionName zawiera wiązaną akcji, to image jest ustawiony jako obraz przycisku dotykowego.
Biorąc pod uwagę nazwę wiązanego działania z przyciskiem dotykowym, ustawia pozycję przycisku w ramach ContextButtonFrame.
Biorąc pod uwagę nazwę związanego działania z przyciskiem dotykowym, ustawia tekst wyświetlany na przycisku.
Rozwiąż akcję z wejściem, podając jej nazwę.
- UnbindActivate(userInputTypeForActivation : Enum.UserInputType,keyCodeForActivation : Enum.KeyCode):()
Odłącz Enum.KeyCode z określonym Enum.UserInputType od uruchamiania Tool.Activation po wiązaniu z ContextActionService:BindActivate().
Usuwa wszystkie powiązane funkcje. Nie zostaną pozostawione żadne nazwy akcji. Wszystkie przyciski dotykowe zostaną usunięte.
Zwraca ImageButton akcję bound, której przycisk dotykowy został utworzony.
Zdarzenia
Właściwości
Metody
BindAction
Połącz działanie z wejściem użytkownika, podając funkcję obsługi działania.Po wykonaniu pasującego wejścia zostanie wywołana funkcja obsługi akcji z argumentami wymienionymi poniżej.Ważne elementy indeksu wejściowego obejmują te, które znajdują się w obserwuje: Enum.KeyCode , Enum.UserInputType lub Enum.PlayerActions .Wezwij tę funkcję, gdy gracz wchodzi w kontekst , w którym można wykonać akcję.Kiedy gracz opuści kontekst, wezwij UnbindAction z tym samym actionName .Możesz ręcznie wezwać funkcję obsługi akcji akcji za pomocą CallFunction.
Poniższy przykład kodu pokazuje, jak Sound może być played podczas naciśnięcia klawisza ( H ), przycisku pada gry lub przycisku ekranu dotykowego.
local ContextActionService = game:GetService("ContextActionService")
-- Dźwięk klaksonu samochodowego
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
-- Gdy gracz siedzi w pojeździe:
ContextActionService:BindAction("HonkHorn", handleAction, true, Enum.KeyCode.H, Enum.KeyCode.ButtonY)
-- Kiedy gracz wyszedł:
ContextActionService:UnbindAction("HonkHorn")
Parametry obsługi akcji
Funkcje obsługi akcji są wywoływane za pomocą następujących parametrów:
<th>Typ</th><th>Opis</th></tr><tr><td>1</td><td><code>ciąg</code></td><td>Ta sama struna, która została pierwotnie przekazana do BindAction†</td></tr><tr><td>2</td><td><code>Enum.UserInputState</code></td><td>Stan wejścia (Rozpocznij, Zmień, Zakończ lub Anuluj)*</td></tr><tr><td>3</td><td><code>Obiekt wejściowy</code></td><td>Obiekt, który zawiera informacje o wejściu (różni się w zależności od typu wejścia użytkownika)</td></tr>
# |
† Pozwala to na jedną funkcję obsługiwanie wielu działań naraz, jeśli to konieczne.Anulowanie jest wysyłane, jeśli jakaś wejściowa akcja była w toku i inna akcja wiązała się z wejściową akcją w toku, lub jeśli akcja wiązania w toku była unbound.
Stos wiązań akcji
Wiązania akcji zachowują się jak stos: jeśli dwie akcje są powiązane z tym samym wejściem użytkownika, zostanie użyty najnowszy wiązany akcja .Jeśli menadżer akcji zwraca Enum.ContextActionResult.Pass, następny najbardziej ostatnio powiązany menadżer akcji zostanie wezwany, a tak dalej, dopóki menadżer nie zanurzy wejścia (poprzez powrót nil lub Enum.ContextActionResult.Sink ).Gdy UnbindAction jest wzywany, menadżer akcji jest usuwany ze stosu.Zachowanie tego stosu można zmienić za pomocą BindActionAtPriority, gdzie dodatkowy parametr priorytetu po createTouchButton może zastąpić kolejność wiązania działań (pierwszy przed niższym).
Przyciski dotykowe
Oprócz typów wejściowych funkcja ta ma trzeci parametr, który kontroluje, czy przycisk jest tworzony dla urządzeń TouchEnabled .Po dziełoprzycisku dotykowego pierwszego, dodano ScreenGui o nazwie "ContextActionGui" do PlayerGui.W środku ScreenGui jest Frame nazywany "ContextButtonFrame" dodany.To jest w tym ramieniu, w którym ImageButtons dla wiązanych działań są rodzicami; możesz użyć GetButton do odzyskania takich przycisków do dostosowania.
Parametry
Sznurek reprezentujący wykonywaną akcję (np. "HonkHorn" lub "OpenDoor").
Funkcja obsługi akcji, wzywana z następującymi parametrami, gdy uruchamiane są wiązane wejścia: string (actionName), Enum.UserInputState i obiekt wejściowy.
Czy przycisk GUI powinien zostać utworzony dla akcji na urządzeniach dotykowych.
Dowolna liczba Enum.KeyCode lub Enum.UserInputType reprezentująca wejścia, które należy wiązać z akcji.
Zwroty
Przykłady kodu
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.
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 zachowuje się jak BindAction, ale pozwala również przypisać priorytet do związanej akcji.Jeśli wiele działań jest powiązanych z tym samym wejściem, funkcja o wyższej priorytecie jest wywoływana niezależnie od kolejności, w której działania zostały powiązane.Innymi słowy, ta funkcja zastępuje normalne zachowanie "stosu" BindAction.
Parametry
Sznurek reprezentujący wykonywaną akcję (np. "HonkHorn" lub "OpenDoor").
Funkcja obsługi akcji, wzywana z następującymi parametrami, gdy uruchamiane są wiązane wejścia: string (actionName), Enum.UserInputState i obiekt wejściowy.
Czy przycisk GUI powinien zostać utworzony dla akcji na urządzeniach dotykowych.
Poziom priorytetu, na którym akcja powinna być powiązana (wyższy uważany za niższy).
Dowolna liczba Enum.KeyCode lub Enum.UserInputType reprezentująca wejścia, które należy przypiąć do akcji.
Zwroty
Przykłady kodu
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
Wiąż Enum.KeyCode, który można użyć z Enum.UserInputType , aby aktywować wydarzenia ClickDetector , Tools i GuiButtons.Kiedy naciśnięty zostanie podany klucz/przycisk, uruchamia wydarzenie Mouse.Button1Down na myszy wysłane do Tool.Equipped.To z kolei uruchamia wydarzenie Tool.Activated, jeśli Tool.ManualActivationOnly nie jest ustawione na prawdę.Dla wejścia na gamepad funkcja ta jest wywoływana przez domyślne skrypty kontroli w celu przypisania przycisku ButtonR2 Enum.KeyCode.
Zauważ, że określone Enum.UserInputType musi być Keyboard lub Gamepad1 poprzez Gamepad8 aby być ważne.
Parametry
Musi być klawiatura lub gamepad1 za pośrednictwem gamepad8.
Zwroty
GetAllBoundActionInfo
GetAllBoundActioninfo zwraca tabelę, która przekłada nazwy wszystkich działań (te, które pierwotnie przekazano do BindAction ) na tabelę zwróconą przez GetBoundActionInfo podczas wezwania z nazwą akcji sama.Używając tej funkcji, możesz sprawdzić wszystkie obecnie powiązane akcje.Jest to przydatne podczas debugowania poziomów priorytetowych lub kolejności stosu.
Zwroty
GetBoundActionInfo
GetBoundActionInfo zwraca tabelę z następującymi kluczami opisującą związaną akcję, biorąc pod uwagę jej nazwę.Aby uzyskać te same informacje dla wszystkich działań naraz, użyj GetAllBoundActionInfo.
<th>Typ</th><th>Opis</th></tr><tr><td><code>kolejność stosu</code></td><td>liczba</td><td>Opisuje indeks akcji na stosie (rosnący)</td></tr><tr><td><code>poziom priorytetu</code> \*</td><td>liczba</td><td>Opisuje poziom <code>Class.ContextActionService:BindActionAtPriority()|priority</code> akcji</td></tr><tr><td><code>createTouchButton</code></td><td>bool</td><td>Opisuje, czy przycisk dotykowy powinien być utworzony na urządzeniach <code>Class.UserInputService.TouchEnabled|TouchEnabled</code></td></tr><tr><td><code>rodzaje wejść</code></td><td>tabela</td><td>Typy wejściowe przekazane do <code>Class.ContextActionService:BindAction()|BindAction</code> dla których ta akcja zostanie uruchomiona</td></tr><tr><td><code>opis</code> †</td><td>ciąg</td><td>Opis akcji ustawionej przez <code>Class.ContextActionService:SetDescription()|SetDescription</code></td></tr><tr><td><code>tytuł</code> †</td><td>strunę</td><td>Tytuł akcji ustawionej przez <code>Class.ContextActionService:SetTitle()|SetTitle</code></td></tr><tr><td><code>obraz</code> †</td><td>ciąg</td><td>Obraz przycisku dotykowego akcji ustawiony przez <code>Class.ContextActionService:SetImage()|SetImage</code></td></tr>
Nazwa |
Poziom priorytetowy nadal będzie zawierał się, nawet jeśli BindActionAtPriority nie został użyty - domyślnie będzie to 2000.
† Wskazuje, że to pole będzie nil jeśli powiązany metod nie został wezwany dla danej akcji.
Parametry
Zwroty
GetCurrentLocalToolIcon
GetCurrentLocalToolIcon zwróci BackpackItem.TextureId z Tool obecnie equipped przez Player lub nil jeśli nie ma takiego narzędzia lub jeśli gracz nie ma Character .
Zwroty
Sznurek zawartości z ID tekstury narzędzia, lub nil jeśli nie można jej znaleźć.
SetDescription
Ustawienie opisu ustawi opis akcji powiązanej przez BindAction.W liście dostępnych działań byłoby to tekst, który opisuje daną akcję.
Chociaż nazwa może sugerować, że ta metoda jest związana z rodziną funkcji, które dostosowują przycisk dotykowy do działań, które je tworzą (SetTitle, SetImage i SetPosition), ta metoda nie wpływa na taki przycisk.Ta metoda po prostu ustawia tekstową opis akcji i nic więcej.
Parametry
Nazwa akcji, która pierwotnie została przekazana do BindAction.
Opis tekstowy akcji, takie jak "Zatrąb w rogu samochodu" lub "Otwórz wyposażenie".
Zwroty
Przykłady kodu
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
Ta metoda ustawia obraz wyświetlany na przycisku dotykowym stworzonym przez BindAction().W szczególności ustawia właściwość ImageLabel.Image w obrębie ImageLabel w ramach ImageButton, która zostanie zwrócona przez GetButton.Jeśli nie istnieje takie wiązane działanie (np.nic nie jest zwracane przez GetButton), ta funkcja nie robi nic i nie rzuca żadnego błędu.
Funkcja ta jest częścią rodziny metod, które dostosowują przycisk dotykowy akcji. Pozostałe w tej rodzinie to SetPosition i SetTitle.
Parametry
Nazwa akcji, która pierwotnie została przekazana do BindAction.
Wartość, do której należy ustawiaćwłaściwość Obraz.
Zwroty
Przykłady kodu
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
Ta metoda ustawia pozycję przycisku dotykowego utworzonego przez BindAction().W szczególności ustawia właściwość GuiObject.Position należącą do ImageButton, która zostanie zwrócona przez GetButton.Jeśli nie istnieje takie wiązane działanie (np.nic nie jest zwracane przez GetButton), ta funkcja nie robi nic i nie rzuca żadnego błędu.
Funkcja ta jest częścią rodziny metod, które dostosowują przycisk dotykowy akcji. Pozostałe w tej rodzinie to SetImage i SetTitle.
Parametry
Nazwa akcji, która pierwotnie została przekazana do BindAction.
Pozycja w ramach ContextButtonFrame.
Zwroty
Przykłady kodu
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
Ustawienie tytułu ustawi tekst wyświetlany na przycisku dotykowym utworzonym przez BindAction.W szczególności ustawia to właściwość TextLabel.Text w obrębie TextLabel w ramach ImageButton, która zostanie zwrócona przez GetButton.Jeśli nie istnieje takie wiązane działanie (np.nic nie jest zwracane przez GetButton), ta funkcja nie robi nic i nie rzuca żadnego błędu.
Funkcja ta jest częścią rodziny metod, które dostosowują przycisk dotykowy akcji. Pozostałe w tej rodzinie to SetImage i SetPosition.
Parametry
Nazwa akcji, która pierwotnie została przekazana do BindAction.
Tekst do wyświetlenia na przycisku.
Zwroty
Przykłady kodu
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 odłączy akcję według nazwy od wejść użytkownika, tak że funkcja menedżera akcji nie będzie już wzywana.Wezwij tę funkcję, gdy kontekst dla jakiejś akcji nie jest już mające zastosowanie, tak jak zamknięcie interfejsu użytkownika, wyjście z samochodu lub unequipping wyjście z Tool.Zobacz BindAction dla więcej informacji o tym, jak działają wiązane akcje.
Funkcja ta nie wyrzuci błędu , jeśli nie ma takiej akcji powiązanej z danym ciągiem.Używając GetAllBoundActionInfo lub zakładki "Wiązania akcji" w konsoli programisty, możesz dowiedzieć się, jakie akcje są obecnie wiązane.
Parametry
Zwroty
Przykłady kodu
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.
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
Odłącz aktywację odłącza aktywację Enum.KeyCode używaną z Enum.UserInputType do aktywacji Tool (lub HopperBin ) za pomocą BindActivate .Funkcja ta zasadniczo cofnie wykonaną przez tę funkcję akcję.
Parametry
Taki sam typ wejścia użytkownika pierwotnie wysłany do BindActivate.
Taki sam kod klucza pierwotnie wysłany do BindActivate.
Zwroty
UnbindAllActions
Usuwa wszystkie funkcje przypisane.Nie zostaną pozostawione żadne nazwy akcji.Wszystkie przyciski dotykowe zostaną usunięte.Jeśli przycisk został manipulowany ręcznie, nie ma gwarancji, że zostanie wyczyszczony.
Zwroty
GetButton
GetButton zwraca ImageButton utworzone przez BindAction jeśli jego trzeci parametr był prawdziwy i urządzenie jest TouchEnabled .Jedyny parametr tej funkcji musi dokładnie pasować do nazwy akcji pierwotnie wysłanej do BindAction.
Jeśli żadna taka akcja nie została przypisana lub jeśli przycisk nie został utworzony, ta funkcja zwraca nil .
Parametry
Nazwa akcji, która pierwotnie została przekazana do BindAction.
Zwroty
Przycisk obrazu utworzony przez BindAction.