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.
Umożliwia doświadczeniu wiązanie wejścia użytkownika z działaniami kon
Kontekst i działanie
Kontekst jest po prostu warunkiem, podczas którego gracz może wykonać pewną akcji. Niektóre przykłady obejmują trzymanie Class.Tool , bycie Class.Seat
Akcja jest po prostu jakieś wejście, które mo
Wiązanie działań kontekstowo
L
Weryfikowanie związanych działań
Aby zobaczyć listę działań i ich powiązanych wiążących się wejść, można sprawdzić zakładkę "Wiązania działań" w Konsole Rozwój (F9 pod
Bezklawiaturowa obsługa
Ten usługa jest szczególnie przydatna dla wsparcia gamepad i touch input. Dla gamepad input można wybrać, aby związać B przycisk z akcją, która zwraca użytkownika do poprzedniego menu, gdy oni wejdą do innego
Przykłady kodu
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 : bool,inputTypes : Tuple):void
Zwiąż wpis użytkownika z funkcją przetwarzania akcji.
Zachowuje się jak BindAction ale umożliwia również przypisanie priorytetu dla wiążącej akcji dla różnych typów wejść (większy przed niższym).
Zwiąż Enum.KeyCode z Enum.UserInputType , aby wywołać Tool.Activation i 1> Class.ClickDetector1> wydarzeń.
Zdobądź tabelę informacji o wszystkich związanych działaniach (klucz to imię przekazane do BindAction , wartość to tabela z GetBoundActionInfo , gdy jest wezwany z kluczem).
Uzyskaj tabelę informacji o związanej akcji, w której nazwa pochodziła pierwotnie z BindAction .
Zwróć Class.BackpackItem.TextureId Class.Tool obecnie Tool przez 11 Class.Player1> .
Ze względu na nazwę związaną akcji z przyciskiem dotykowym, ustawia opis akcji.
Jeśli klucz actionName zawiera związaną akcji, to image jest ustawiony jako obraz przycisku dotykowego.
Biorąc pod uwagę nazwę związaną akcji z przyciskiem dotykowym, ustawia pozycję przycisku w ramach KontekstuPrzyciskaFrame.
Ze względu na nazwę związaną akcji z przyciskiem dotykowym ustawia tekst wyświetlany na przycisku.
Odzwiąż akcję z podanego jej imienia.
- UnbindActivate(userInputTypeForActivation : Enum.UserInputType,keyCodeForActivation : Enum.KeyCode):void
Zwiń Enum.KeyCode z Enum.UserInputType z konfiguratora Tool.Activation przy użyciu 2>Class.Tool.Activate()2>.
Usunie wszystkie związane funkcje. Nie będzie pozostawionych żadnych nazw działań. Wszystkie przyciski dotykowe zostaną usunięte.
Odzyskuje ImageButton z bound działania, który miał przycisk wejściowy dotykowy stworzony.
Zdarzenia
Właściwości
Metody
BindAction
Zwiąż akcję z wpisem użytkownika, zależnie od funkcji przet
Poniższy kod pokazuje, jak Sound może być played podczas gdy klucz ( H), przycisk gry lub przycisk ekranu dotykowego jest naciskany.
local ContextActionService = game:GetService("ContextActionService")
-- Dźwięk korneta 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)
-- Gdy gracz wyjdzie:
ContextActionService:UnbindAction("HonkHorn")
Parametry sterowania akcją
Funkcje wiązania akcji są wzywane z następującymi parami parametrów:
<tr><td>1</td><td><code>strona</code></td><td>Ta sama wiadomość, która została pierwotnie przekazana do BindAction</td></tr><tr><td>2</td><td><code>enum.UserInputState</code></td><td>Stan wejścia (Zacznij, Zmień, Zakończ lub Anuluj)\*</td></tr><tr><td>3</td><td><code>Przedmiot wejścia</code></td><td>Obiekt, który zawiera informacje o wejściu (zależy to od właściwości Użytkownika)</td></tr>
# | Typ | Opis |
※ Umożliwia jedną funkcję do przetwarzania wielu akcji jednocześnie, jeśli to konieczne. * Anulowanie jest wysyłane, jeśli pewne wejście było w toku i inne akcje były powiązane z w toku lub jeśli w toku była unbound .
Stosowanie powiązań działania
Zachowanie
Przyciski dotykowe
Oprócz typów wejścia, ten parametr funkcji kontroluje, czy przycisk jest dziełodla urządzeń Class.
Parametry
Strona przedstawiająca wykonanych czynności (takich jak "HonkHorn" lub "OpenDoor").
Funkcja przetwarzania akcji, nazwana z następującymi parami, gdy włączone związane wejścia są aktywowane: string (actionName), Enum.UserInputState i an Object.
Czy przycisk GUI powinien zostać utworzony dla akcji na urządzeniach wejścia dotykowego.
Dowolna liczba Enum.KeyCode lub Enum.UserInputType reprezentująca wejścia do wiązania z akcji.
Zwroty
Przykłady kodu
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 zachowuje się jak BindAction , ale umożliwia również przypisanie priorytetu dla związanego akcji. Jeśli wiele działań jest powiązanych z tym samym wejściem, funkcja priorytetowa wyższej rangi jest w każdym razie wywołana, niezależnie od kolejności, w jakiej działania zostały powiązane. Innymi słowy, ta
Parametry
Strona przedstawiająca wykonanych czynności (takich jak "HonkHorn" lub "OpenDoor").
Funkcja przetwarzania akcji, nazwana z następującymi parami, gdy włączone związane wejścia są aktywowane: string (actionName), Enum.UserInputState i an Object.
Czy przycisk GUI powinien zostać utworzony dla akcji na urządzeniach wejścia dotykowego.
Poziom priorytetu, na którym powinien być związany z działaniem (wyższy przed niższym).
Dowolna liczba Menu.KeyCode lub Menu.UserInputType reprezentujące wejścia do wiązania z akcji.
Zwroty
Przykłady kodu
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
Zwiąż
Uwaga, że Enum.UserInputType określony jako Keyboard musi być Gamepad1 lub 2>Gamepad12> poprzez 5>Gamepad85>, aby być ważny.
Parametry
Musi być Keyboard lub Gamepad1 poprzez Gamepad8.
Zwroty
GetAllBoundActionInfo
GetAllBindActioninfo zwraca tabelę, która mapuje wszystkie nazwy akcji (takie jakie były pierwotnie przekazane do Class.ContextActionService:BindAction()|BindAction) do tabeli zwróconej przez Class.ContextActionService:GetBindActionInfo()|GetBindAction) po wezwanie z ich imieniem akcji. Używając tej funkcji, można inspektować wszystkie
Zwroty
GetBoundActionInfo
GetBoundActionInfo zwraca tabelę z następującymi kluczami opisującymi związaną akcję, która ma nazwę. Aby uzyskać tę samą informację dla wszystkich akcji jednocześnie, użyj GetAllBoundActionInfo .
<tr><td><code>orderStack</code></td><td>liczba</td><td>Opisuje indeks działania na stosie (zwiększanie)</td></tr><tr><td><code>priorтетowyLevel</code> \*</td><td>liczba</td><td>Opisuje poziom <code>Class.ContextActionService:BindActionAtPriority()|priority</code> akcji</td></tr><tr><td><code>utwórz przycisk dotykowy</code></td><td>boolean</td><td>Opisuje, czy przycisk dotykowy powinien zostać utworzony na urządzeniach <code>Class.UserInputService.TouchEnabled|TouchEnabled</code></td></tr><tr><td><code>wpisywanieTypów</code></td><td>tabela</td><td>Wprowadzane rodzaje danych przesyłane są do <code>Class.ContextActionService:BindAction()|BindAction</code> dla których ta akcja zostanie wywołana</td></tr><tr><td><code>opis</code> †</td><td>ciąg</td><td>Opis zestawu akcji ustawiony przez <code>Class.ContextActionService:SetDescription()|SetDescription</code></td></tr><tr><td><code>tytuł</code> ※</td><td>ciąg</td><td>Tytuł ustawiony 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 | Typ | Opis |
Poziom priorytetu nadal będzie uwzględniać, nawet jeśli BindActionAtPriority nie zostanie użyty - domyślnie będzie to 2000.
^ Wskazuje, że to pole będzie nil jeśli powiązany metoda nie zwołano dla danej akcji.
Parametry
Zwroty
GetCurrentLocalToolIcon
GetCurrentLocalToolIcon zwróci BackpackItem.TextureId z Class.Tool obecnie Tool przez equipped lub 1> nil1> jeśli nie ma takiego narzędzia lub gracz brakuje 4> Class.Player.Character|Character
Zwroty
String treści z Tool.TexturesId lub nil, jeśli nie można go znaleźć.
SetDescription
SetDescription ustawi opis akcji związanej z BindAction . W liście dostępnych akcji będzie to tekst, który opisuje dany atak.
Chociaż nazwa może sugerować, że ten metod jest związany z rodziną funkcji, które personalizują przycisk dotowy dla akcji, które je tworzą ( SetTitle , SetImage i SetPosition
Parametry
Nazwa akcji została pierwotnie przekazana na BindAction.
Opis akcji, takich jak "Honk the car's horn" lub "Open the wyposażenie".
Zwroty
Przykłady kodu
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
Ten metod ustawia obraz pokazany na przycisku dotykowym stworzonym przez BindAction() . W szczególności ustawia ImageLabel.Image właściwość Class.ImageLabel</
Funkcja ta jest częścią rodziny metod, które dostosowują przycisk dotykowy akcji. Inne w tej rodziny obejmują SetPosition i SetTitle.
Parametry
Nazwa akcji została pierwotnie przekazana na BindAction.
Wartość, do której należy ustawiaćwłaściwość Zdjęcia.
Zwroty
Przykłady kodu
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
Ten metod ustawia pozycję przycisku dotykowego stworzonego przez BindAction() . W szczególności ustawia GuiObject.Position właściwość ImageButton, która zostanie zwrócona przez 2> Class.ContextAction
Funkcja ta jest częścią rodziny metod, które dostosowują przycisk dotykowy akcji. Inne w tej rodziny obejmują SetImage i SetTitle.
Parametry
Nazwa akcji została pierwotnie przekazana na BindAction.
Pozycja w ramach ContextButtonFrame.
Zwroty
Przykłady kodu
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
UstawTytuł ustawi tekst wyświetlany na przycisku dotykowym stworzonym przez BindAction . W szczególności, ustawia TextLabel.Text właściwość Class.
Funkcja ta jest częścią rodziny metod, które dostosowują przycisk dotykowy akcji. Inne w tej rodziny obejmują SetImage i SetPosition.
Parametry
Nazwa akcji została pierwotnie przekazana na BindAction.
Tekst do wyświetlenia przycisku.
Zwroty
Przykłady kodu
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 będzie odłączać akcję pod wzorem od użytkownika, aby funkcja handlera akcji nie była już mające zastosowanie. Zadzwoń do tej funkcji, gdy kontekst dla niektórej akcji nie jest już dostępny, takich jak zamknięcie interfejsu użytkownika, wyjście z samochodu lub
Ta funkcja nie będzie rzucać błędem, jeśli nie ma takiej akcji powiązanej z podaną ciąg. Używając GetAllBoundActionInfo lub strony "Action Bindings" w konsoli rozwoju, możesz dowiedzieć się, które akcje są obecnie powiązane.
Parametry
Zwroty
Przykłady kodu
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 an Enum.KeyCode (lub Enum.UserInputType ) dla aktywowania Tool (lub 1> Class.HopperBin1> ) używając 4> Class.ContextActionService:BindActivate()|BindActivate4> . Ta funkcja wykonuje zasad
Parametry
Ten sam UserInputType został pierwotnie wysłany do BindActivate.
Ten sam KeyCode został pierwotnie wysłany do BindActivate.
Zwroty
UnbindAllActions
Usunie wszystkie związane funkcje. Nie pozostaną żadne nazwy akcji. Wszystkie przyciski dotyku zostaną usunięte. Jeśli przycisk był manipulowany ręcznie, nie ma gwarancji, że zostanie on naprawiony.
Zwroty
GetButton
GetButton zwraca ImageButton stworzone przez BindAction , jeśli jego trzeci parametr był prawdziwy i urządzenie było TouchEnabled . Jedyne parametru do tej funkcji musi być dokładnie takim, jak nazwa akcji pierwotnie wysłanej do BindAction.
Jeśli taka akcja nie była związana lub jeśli przycisk nie został utworzony, ta funkcja zwraca nil .
Parametry
Nazwa akcji została pierwotnie przekazana na BindAction.
Zwroty
Przycisk obrazu stworzony przez BindAction.