ContextActionService
*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.
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ã
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
- BindAction(actionName : string,functionToBind : function,createTouchButton : bool,inputTypes : Tuple):void
Làm cho người dùng nhập vào một hành động được cung cấp bởi một chức năng xử lý hành động.
Hành xử giống như BindAction nhưng cũng cho phép một ưu tiên được giao cho hành động liên quan đến các loại dữ liệu trùm (càng cao càng tốt).
Kết hợp một Class.Tool.Activation và Class.ClickDetector bằng cách sử dụng một Enum.KeyCode đặc biệt Enum.UserInputType và Tool.Activation sự kiện.
Nhận một bảng thông tin về tất cả các hành động liên quan (nhãn là tên được truyền cho BindAction , giá trị là một bảng từ GetBoundActionInfo khi gọi với các chìa khóa).
Nhận một bảng thông tin về hành động liên kết được gọi bằng cách gọi tên nó ban đầu đã được chuyển đến BindAction .
Lấy BackpackItem.TextureId của một Tool hiện tại equipped bởi 1> Class.Player1> .
Đã đặt tên của một hành động liên kết với nút cảm ứng, mô tả hành động.
Nếu actionName key có chứa một hành động liên kết, thì image được đặt là hình ảnh của nút cảm ứng.
Đã đặt tên của một hành động liên kết với nút chạm, thiết lập vị trí của nút trong ContextButtonFrame.
Đã đặt tên một hành động liên kết với nút chạm, thiết lập văn bản được hiển thị trên nút.
Huỷ kết nối một hành động từ nhập tên của nó.
- UnbindActivate(userInputTypeForActivation : Enum.UserInputType,keyCodeForActivation : Enum.KeyCode):void
Huỷ kết nối một Enum.KeyCode với một Enum.UserInputType đặc biệt từ việc kích hoạt Tool.Activation khi được kết nối với 1> Class.ContextActionService:BindActivate()1> .
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 chạm sẽ được xóa.
Lấy một ImageButton của một bound hành động có nút lượng chạm được tạo.
Sự Kiện
Thuộc Tính
Phương Pháp
BindAction
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ểu | Mô 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ố
Một chuỗi đại diện cho hành động đang thực hiện (ví dụ: "HonkHorn" hoặc "OpenDoor").
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.
Whether a GUI button should be created for the action on touch input devices.
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
Mẫu mã
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 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ố
Một chuỗi đại diện cho hành động đang thực hiện (ví dụ: "HonkHorn" hoặc "OpenDoor").
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.
Whether a GUI button should be created for the action on touch input devices.
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).
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
Mẫu mã
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
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ố
Phải là Keyboard hoặc Gamepad1 qua Gamepad8.
Lợi Nhuận
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ên | Kiểu | Mô 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ố
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
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 và
Tham Số
Tên hành động đã được chuyển cho BindAction.
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
Mẫu mã
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
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 SetPosition và SetTitle .
Tham Số
Tên hành động đã được chuyển cho BindAction.
Giá trị mà thuộc tính Hình ảnh nên được cài đặt.
Lợi Nhuận
Mẫu mã
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
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 SetImage và SetTitle .
Tham Số
Tên hành động đã được chuyển cho BindAction.
Vị trí trong ContextButtonFrame.
Lợi Nhuận
Mẫu mã
local ContextActionService = game:GetService("ContextActionService")
local ACTION_INSPECT = "Inspect"
local INPUT_INSPECT = Enum.KeyCode.E
local IMAGE_INSPECT = "rbxassetid://1826746856" -- Image of a speech bubble with ? in it
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_INSPECT and inputState == Enum.UserInputState.End then
print("Inspecting")
end
end
-- For touch devices, a button is created on-screen automatically via the 3rd parameter
ContextActionService:BindAction(ACTION_INSPECT, handleAction, true, INPUT_INSPECT)
-- We can use these functions to customize the button:
ContextActionService:SetImage(ACTION_INSPECT, IMAGE_INSPECT)
ContextActionService:SetTitle(ACTION_INSPECT, "Look")
ContextActionService:SetDescription(ACTION_INSPECT, "Inspect something.")
ContextActionService:SetPosition(ACTION_INSPECT, UDim2.new(0, 0, 0, 0))
-- We can manipulate the button directly using ContextActionService:GetButton
local imgButton = ContextActionService:GetButton(ACTION_INSPECT)
if imgButton then -- Remember: non-touch devices won't return anything!
imgButton.ImageColor3 = Color3.new(0.5, 1, 0.5) -- Tint the ImageButton green
end
SetTitle
SetTitle 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 SetImage và SetPosition .
Tham Số
Tên hành động đã được chuyển cho BindAction.
Văn bản để hiển thị trên nút.
Lợi Nhuận
Mẫu mã
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 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ố
Lợi Nhuận
Mẫu mã
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 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ố
Cùng một UserInputType gốc đã được gửi đến BindActivate.
Cùng một KeyCode ban đầu đã được gửi đến BindActivate.
Lợi Nhuận
UnbindAllActions
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
GetButton
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ố
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.