ContextActionService

Pokaż przestarzałe

*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.

Brak możliwości tworzenia
Usługa

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

ContextActionService Tool Reload

local ContextActionService = game:GetService("ContextActionService")
local ACTION_RELOAD = "Reload"
local tool = script.Parent
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_RELOAD and inputState == Enum.UserInputState.Begin then
print("Reloading!")
end
end
tool.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_RELOAD, handleAction, true, Enum.KeyCode.R)
end)
tool.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_RELOAD)
end)

Podsumowanie

Metody

Zdarzenia

Właściwości

Metody

BindAction

void

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>
#TypOpis

※ 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

actionName: string

Strona przedstawiająca wykonanych czynności (takich jak "HonkHorn" lub "OpenDoor").

functionToBind: function

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.

createTouchButton: bool

Czy przycisk GUI powinien zostać utworzony dla akcji na urządzeniach wejścia dotykowego.

inputTypes: Tuple

Dowolna liczba Enum.KeyCode lub Enum.UserInputType reprezentująca wejścia do wiązania z akcji.


Zwroty

void

Przykłady kodu

ContextActionService Tool Reload

local ContextActionService = game:GetService("ContextActionService")
local ACTION_RELOAD = "Reload"
local tool = script.Parent
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_RELOAD and inputState == Enum.UserInputState.Begin then
print("Reloading!")
end
end
tool.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_RELOAD, handleAction, true, Enum.KeyCode.R)
end)
tool.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_RELOAD)
end)
General Action Handler

local ContextActionService = game:GetService("ContextActionService")
local function handleAction(actionName, inputState, inputObj)
if inputState == Enum.UserInputState.Begin then
print("Handling action: " .. actionName)
print(inputObj.UserInputType)
end
-- Since this function does not return anything, this handler will
-- "sink" the input and no other action handlers will be called after
-- this one.
end
ContextActionService:BindAction("BoundAction", handleAction, false, Enum.KeyCode.F)
Stacked Action Handlers

local ContextActionService = game:GetService("ContextActionService")
-- Define an action handler for FirstAction
local function actionHandlerOne(actionName, inputState, _inputObj)
if inputState == Enum.UserInputState.Begin then
print("Action Handler One: " .. actionName)
end
-- This action handler returns nil, so it is assumed that
-- it properly handles the action.
end
-- Binding the action FirstAction (it's on the bottom of the stack)
ContextActionService:BindAction("FirstAction", actionHandlerOne, false, Enum.KeyCode.Z, Enum.KeyCode.X, Enum.KeyCode.C)
-- Define an action handler for SecondAction
local function actionHandlerTwo(actionName, inputState, inputObj)
if inputState == Enum.UserInputState.Begin then
print("Action Handler Two: " .. actionName)
end
if inputObj.KeyCode == Enum.KeyCode.X then
return Enum.ContextActionResult.Pass
else
-- Returning nil implicitly Sinks inputs
return Enum.ContextActionResult.Sink
end
end
-- Binding SecondAction over the first action (since it bound more recently, it is on the top of the stack)
-- Note that SecondAction uses the same keys as
ContextActionService:BindAction("SecondAction", actionHandlerTwo, false, Enum.KeyCode.Z, Enum.KeyCode.X)

BindActionAtPriority

void

BindActionAtPriority 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

actionName: string

Strona przedstawiająca wykonanych czynności (takich jak "HonkHorn" lub "OpenDoor").

functionToBind: function

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.

createTouchButton: bool

Czy przycisk GUI powinien zostać utworzony dla akcji na urządzeniach wejścia dotykowego.

priorityLevel: number

Poziom priorytetu, na którym powinien być związany z działaniem (wyższy przed niższym).

inputTypes: Tuple

Dowolna liczba Menu.KeyCode lub Menu.UserInputType reprezentujące wejścia do wiązania z akcji.


Zwroty

void

Przykłady kodu

ContextActionService BindAction Priorities

local ContextActionService = game:GetService("ContextActionService")
local INPUT_KEY1 = Enum.KeyCode.Q
local INPUT_KEY2 = Enum.KeyCode.E
local function handleThrow(actionName: string, inputState: Enum.UserInputState, inputObject: InputObject)
if inputState ~= Enum.UserInputState.Begin then
return Enum.ContextActionResult.Pass
end
print(`Action [{actionName}] occurred. KeyCode [{inputObject.KeyCode}] pressed.`)
return Enum.ContextActionResult.Sink
end
local function handlePunch(actionName: string, inputState: Enum.UserInputState, inputObject: InputObject)
if inputState ~= Enum.UserInputState.Begin then
return Enum.ContextActionResult.Pass
end
print(`Action [{actionName}] occurred. KeyCode [{inputObject.KeyCode}] pressed.`)
return Enum.ContextActionResult.Sink
end
-- Without specifying priority, the most recently bound action is called first,
-- so pressing INPUT_KEY1 prints "Punch" and then sinks the input.
ContextActionService:BindAction("DefaultThrow", handleThrow, false, INPUT_KEY1)
ContextActionService:BindAction("DefaultPunch", handlePunch, false, INPUT_KEY1)
-- Here we bind both functions in the same order as above, but with explicitly swapped priorities.
-- That is, we give "Throw" a higher priority of 2 so it will be called first,
-- despite "Punch" still being bound more recently.
-- Pressing INPUT_KEY2 prints "Throw" and then sinks the input.
ContextActionService:BindActionAtPriority("PriorityThrow", handleThrow, false, 2, INPUT_KEY2)
ContextActionService:BindActionAtPriority("PriorityPunch", handlePunch, false, 1, INPUT_KEY2)

BindActivate

void

Zwiąż

Uwaga, że Enum.UserInputType określony jako Keyboard musi być Gamepad1 lub 2>Gamepad12> poprzez 5>Gamepad85>, aby być ważny.

Parametry

userInputTypeForActivation: Enum.UserInputType

Musi być Keyboard lub Gamepad1 poprzez Gamepad8.

keyCodesForActivation: Tuple

Zwroty

void

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>
NazwaTypOpis

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

actionName: string

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

void

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

actionName: string

Nazwa akcji została pierwotnie przekazana na BindAction.

description: string

Opis akcji, takich jak "Honk the car's horn" lub "Open the wyposażenie".


Zwroty

void

Przykłady kodu

ContextActionService Touch Button

local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end

SetImage

void

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

actionName: string

Nazwa akcji została pierwotnie przekazana na BindAction.

image: string

Wartość, do której należy ustawiaćwłaściwość Zdjęcia.


Zwroty

void

Przykłady kodu

ContextActionService Touch Button

local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end

SetPosition

void

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

actionName: string

Nazwa akcji została pierwotnie przekazana na BindAction.

position: UDim2

Pozycja w ramach ContextButtonFrame.


Zwroty

void

Przykłady kodu

ContextActionService Touch Button

local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end

SetTitle

void

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

actionName: string

Nazwa akcji została pierwotnie przekazana na BindAction.

title: string

Tekst do wyświetlenia przycisku.


Zwroty

void

Przykłady kodu

ContextActionService Touch Button

local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end

UnbindAction

void

UnbindAction 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

actionName: string

Zwroty

void

Przykłady kodu

ContextActionService Tool Reload

local ContextActionService = game:GetService("ContextActionService")
local ACTION_RELOAD = "Reload"
local tool = script.Parent
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_RELOAD and inputState == Enum.UserInputState.Begin then
print("Reloading!")
end
end
tool.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_RELOAD, handleAction, true, Enum.KeyCode.R)
end)
tool.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_RELOAD)
end)

UnbindActivate

void

UnbindActivate unbinds 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

userInputTypeForActivation: Enum.UserInputType

Ten sam UserInputType został pierwotnie wysłany do BindActivate.

keyCodeForActivation: Enum.KeyCode

Ten sam KeyCode został pierwotnie wysłany do BindActivate.

Wartość domyślna: "Unknown"

Zwroty

void

UnbindAllActions

void

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

void

GetButton

Wynik

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

actionName: string

Nazwa akcji została pierwotnie przekazana na BindAction.


Zwroty

Przycisk obrazu stworzony przez BindAction.

Zdarzenia

LocalToolEquipped

Występuje, gdy obecny gracz wyposaż się w Tool.

Parametry

toolEquipped: Instance

LocalToolUnequipped

Występuje, gdy obecny gracz zdjął Tool .

Parametry

toolUnequipped: Instance