ContextActionService

Hiển Thị Bản Đã Lỗi Thời

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Không Thể Tạo
Dịch Vụ

Cho phép một trải nghiệm kết

Kiến ​​trúc và hành động

Một context là chỉ một điều kiện trong đó một người chơi thực hiện một hành động nào đó. Mộ

Một hành động là

Làm theo ngữ cảnh hành động

Là tốt hơn sử dụng ContextActionService's Class.UserInputService.InputB

Kiểm tra Hành Động Biên Giới

Để xem một danh sách các hành động và các tham chiếu của chúng, bạn có thể kiểm tra trang "Hành động Bind

Nhập không dùng bàn phím

Dịch vụ này đặc biệt hữu ích cho hỗ trợ gamepad và touch input. Đối với gamepad input, bạn có thể chọn liên kết B button đến một hành động đư

Mẫu mã

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)

Tóm Tắt

Phương Pháp

Sự Kiện

Thuộc Tính

Phương Pháp

BindAction

void

Kết hợp một hành động với một hà

Mẫu mã dưới đây cho thấy làm thế nào một Sound có thể được played trong khi một nút chìa khóa ( H), nút gamepad hoặc nút màn hình cảm ứng được nhấn.


local ContextActionService = game:GetService("ContextActionService")
-- Một tiếng chuông xe
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
-- Khi người chơi ngồi vào xe:
ContextActionService:BindAction("HonkHorn", handleAction, true, Enum.KeyCode.H, Enum.KeyCode.ButtonY)
-- Khi người chơi nhận được:
ContextActionService:UnbindAction("HonkHorn")

Cài đặt Action Handler

Các hàm hành động được gọi với các tham số sau đây:


<tr>
<td>1</td>
<td><code>chuỗi</code></td>
<td>Cùng một chuỗi đã được truyền cho BindAction™</td>
</tr>
<tr>
<td>2</td>
<td><code>Danh sách.UserInputState</code></td>
<td>Tình trạng của vị trí nhập (Bắt đầu, Thay đổi, Kết thúc hoặc Hủy bỏ)\*</td>
</tr>
<tr>
<td>3</td>
<td><code>Input đối tượng</code></td>
<td>Một đối tượng chứa thông tin về lựa chọn (biến đổi tùy thuộc vào UserInputType)</td>
</tr>
#KiểuMô tả

※ Điều này cho phép một chức năng xử lý nhiều hành động cùng một lúc, nếu cần thiết. * Hủy được gửi nếu một số dữ liệu đang thi hành và một hành động khác đã liên kết với dữ liệu đang thi hành, hoặc nếu dữ liệu đang thi hành đã Class.Context

Cú độ Rào hành động

H

Cảm ứng nút

Ngoài các loại nhập, hàm này còn kiểm tra thứ ba của tham số

Tham Số

actionName: string

Một chuỗi đại diện cho hành động đang thực hiện (ví dụ: "HonkHorn" hoặc "OpenDoor").

functionToBind: function

Hành động xử lý chức năng, gọi với các tham số sau đây khi các tham số liên kết được kích hoạt: string (actionName), Enum.UserInputState và một đối tượng đầu vào.

createTouchButton: bool

Whether a GUI button should be created for the action on touch input devices.

inputTypes: Tuple

Bất kỳ số nào của Enum.KeyCode hoặc Enum.UserInputType đại diện cho các lựa chọn để kết nối với hành động.


Lợi Nhuận

void

Mẫu mã

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 biểu tượng như BindAction nhưng cũng cho phép một ưu tiên được giao cho hành động liên kết. Nếu nhiều hành động được liên kết với cùng một nhập, chức năng cao hơn của ưu tiên sẽ được gọ

Tham Số

actionName: string

Một chuỗi đại diện cho hành động đang thực hiện (ví dụ: "HonkHorn" hoặc "OpenDoor").

functionToBind: function

Hành động xử lý chức năng, gọi với các tham số sau đây khi các tham số liên kết được kích hoạt: string (actionName), Enum.UserInputState và một đối tượng đầu vào.

createTouchButton: bool

Whether a GUI button should be created for the action on touch input devices.

priorityLevel: number

Cấp độ ưu tiên mà hành động nên được kết nối (càng cao càng tốt trước khi thấp nhất).

inputTypes: Tuple

Bất kỳ số lượng KeyCode hoặc UserInputType đại diện cho các thông số để kết nối với hành động.


Lợi Nhuận

void

Mẫu mã

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

Lưu ý rằng Enum.UserInputType được định nghĩa phải là Keyboard hoặc Gamepad1 qua 1> Gamepad81> để được hợp lệ.

Tham Số

userInputTypeForActivation: Enum.UserInputType

Phải là Keyboard hoặc Gamepad1 qua Gamepad8.

keyCodesForActivation: Tuple

Lợi Nhuận

void

GetAllBoundActionInfo

GetAllBindActioninfo trả về một bảng mà map tên tất cả các hành động (thông thường được truyền đến Class.ContextActionService:BindAction()|BindAction) đến một bảng trả lại bởi Class.ContextActionService:GetBindActionInfo()|GetBindActionInfo) khi gọi với tên


Lợi Nhuận

GetBoundActionInfo

GetBoundActionInfo trả về một bảng với các chìa khóa sau đây mô tả một hành động liên kết được cung cấp tên của nó. Để lấy cùng một thông tin cho tất cả các hành động ngay lập tức, hãy sử dụng GetAllBoundActionInfo .


<tr>
<td><code>stackĐặt hàng</code></td>
<td>con số</td>
<td>
Mô tả chỉ mục hành động trên nút (tăng)
</td>
</tr>
<tr>
<td><code>mức ưu tiênLevel</code> \*</td>
<td>con số</td>
<td>
Mô tả cấp độ <code>Class.ContextActionService:BindActionAtPriority()|priority</code> của hành động
</td>
</tr>
<tr>
<td><code>tạoTouchButton</code></td>
<td>boolean</td>
<td>
Mô tả xem xét có nên tạo một nút chạm trên các thiết bị <code>Class.UserInputService.TouchEnabled|TouchEnabled</code>
</td>
</tr>
<tr>
<td><code>nhập các kiểu dữ liệu</code></td>
<td>bảng</td>
<td>
Các hệ thống đầu vào đã được chuyển đến <code>Class.ContextActionService:BindAction()|BindAction</code> cho đó hành động này sẽ kích hoạt
</td>
</tr>
<tr>
<td><code>mô tả</code> ^</td>
<td>chuỗi</td>
<td>
Mô tả hành động được thiết lập bởi <code>Class.ContextActionService:SetDescription()|SetDescription</code>
</td>
</tr>
<tr>
<td><code>tiêu đề</code> ^</td>
<td>chuỗi</td>
<td>
Tiêu đề của hành động được thiết lập bởi <code>Class.ContextActionService:SetTitle()|SetTitle</code>
</td>
</tr>
<tr>
<td><code>hình ảnh</code> ^</td>
<td>chuỗi</td>
<td>
Hình ảnh của nút chạm của hành động được thiết lập bởi <code>Class.ContextActionService:SetImage() | SetImage</code>
</td>
</tr>
TênKiểuMô tả

Cấp độ ưu tiên vẫn sẽ được bao gồm ngay cả khi BindActionAtPriority không được sử dụng - bởi mặc định nó sẽ là 2000.

^ Indicates that this field will be nil nếu phương pháp được liên kết không được gọi cho hành động đã được chỉ định.

Tham Số

actionName: string

Lợi Nhuận

GetCurrentLocalToolIcon

GetCurrentLocalToolIcon sẽ trả lại BackpackItem.TextureId của một Tool hiện tại equipped bởi người chơi, hoặc 1> nil1> nếu không có công cụ n


Lợi Nhuận

Một chuỗi chữ từ Tool's TextureId, hoặc nil nếu không thể tìm thấy nó.

SetDescription

void

SetDescription sẽ đặt mô tả của một hành động được kết nối bởi BindAction . Trong một danh sách các hành động có sẵn, đây sẽ là văn bản mô tả hành động đã được cung cấp.

Mặc dù tên có thể cho thấy rằng phương pháp này liên quan đến gia tộc các hàm tùy chỉnh mà tạo ra chúng ( SetTitle , SetImage

Tham Số

actionName: string

Tên hành động đã được chuyển cho BindAction.

description: string

Một mô tả văn bản của hành động, chẳng hạn như "Honk the car's horn" hoặc "Mở kho".


Lợi Nhuận

void

Mẫu mã

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

Phương thức này đặt hình ảnh được hiển thị trên nút cảm ứng được tạo bởi BindAction() . Theo cách nào đó

Hàm này là một trong những hàm trong gia đình các phương thức tùy chỉnh nút cảm ứng của một hành động. Các hàm khác trong gia đình này bao gồm SetPositionSetTitle .

Tham Số

actionName: string

Tên hành động đã được chuyển cho BindAction.

image: string

Giá trị mà thuộc tính Hình ảnh nên được cài đặt.


Lợi Nhuận

void

Mẫu mã

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

Phương thức này đặt vị trí của nút chạm được tạo bởi BindAction() . Theo cách nào đó, nó đặt GuiObject.Position thuộc tính của nú

Hàm này là một trong những hàm trong gia đình các phương thức tùy chỉnh nút cảm ứng của một hành động. Các hàm khác trong gia đình này bao gồm SetImageSetTitle .

Tham Số

actionName: string

Tên hành động đã được chuyển cho BindAction.

position: UDim2

Vị trí trong ContextButtonFrame.


Lợi Nhuận

void

Mẫu mã

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

SetTitle sẽ đặt tên văn bản được hiển thị trên nút cảm ứng được tạo bởi BindAction . Theo cách này, điều này s

Hàm này là một trong những hàm trong gia đình các phương thức tùy chỉnh nút cảm ứng của một hành động. Các hàm khác trong gia đình này bao gồm SetImageSetPosition .

Tham Số

actionName: string

Tên hành động đã được chuyển cho BindAction.

title: string

Văn bản để hiển thị trên nút.


Lợi Nhuận

void

Mẫu mã

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 sẽ unbind một hành động bằng tên từ người dùng để cho phép chức năng xử lý hành động không còn được gọi. Gọi chức năng này khi context cho một số hành động không còn hiện hànhdụ

Hàm này sẽ không ném một lỗi nếu không có hành động nào liên quan với chuỗi được cung cấp. Sử dụng GetAllBoundActionInfo hoặc trang "Action Bindings" của Developer Console, bạn có thể tìm ra những hành động hiện tại đang li

Tham Số

actionName: string

Lợi Nhuận

void

Mẫu mã

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 used with an Enum.UserInputType for activating a Tool (or a 1> Class.HopperBin1> ) using 4> Class.ContextActionService:BindActivate()|BindActivate4> . This function essentially undoes the action performed

Tham Số

userInputTypeForActivation: Enum.UserInputType

Cùng một UserInputType gốc đã được gửi đến BindActivate.

keyCodeForActivation: Enum.KeyCode

Cùng một KeyCode ban đầu đã được gửi đến BindActivate.

Giá Trị Mặc Định: "Unknown"

Lợi Nhuận

void

UnbindAllActions

void

Loại bỏ tất cả các chức năng được liên kết. Không có tên hành động nào sẽ được giữ lại. Tất cả các nút cảm ứng sẽ bị xóa. Nếu một nút đã được thiết lập thủ công, không có đảm bảo rằng nó sẽ được làm sạch.


Lợi Nhuận

void

GetButton

Sinh Lợi

GetButton trả về Class.ImageButton được tạo bởi Class.ContextActionService:BindAction nếu tham số thứ ba của nó là true và thiết bị là BindAction . The only parameter to this function must match exactly the name of the action originally sent to BindAction.

Nếu không có hành động nào được liên kết hoặc nếu không có nút được tạo, chức năng này trả về nil .

Tham Số

actionName: string

Tên hành động đã được chuyển cho BindAction.


Lợi Nhuận

Một Button hình ảnh tạo bởi BindAction.

Sự Kiện

LocalToolEquipped

Bắt đầu khi người chơi hiện tại trang bị một Tool .

Tham Số

toolEquipped: Instance

LocalToolUnequipped

Lửa khi người chơi hiện tại bỏ bớt một Tool .

Tham Số

toolUnequipped: Instance