Hệ thống Hành động Nhập

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

Hệ thống Hành động Nhập đa nền tảng cho phép bạn kết nối các hành động và sắp xếp các liên kết giữa các đầu vào phần cứng khác nhau trong thời gian chỉnh sửa. Kết hợp với bối cảnh, bạn có thể dễ dàng cấu hình và chỉnh sửa một hệ thống đầu vào mô-đun hoạt động trên bất kỳ thiết bị nào trong bất kỳ giai đoạn chơi nào. Các trường hợp sử dụng bao gồm:

  • Một hệ thống bắn súng từ góc nhìn thứ nhất với các hành động thay đổi một cách động phụ thuộc vào việc người chơi đang ở chế độ chiến đấu hay chế độ quan sát.
  • Một hệ thống lái xe toàn diện được trang bị tăng tốc/giảm tốc, bộ tăng tốc xe, và trạm nạp nhiên liệu.
  • Phím nóng cho một hệ thống kỹ năng trong một trò chơi đánh nhau để thay đổi các chiêu thức một cách liền mạch mà không làm người chơi bỏ lỡ một cú đấm.

Các bối cảnh đầu vào

InputContext là một tập hợp các hành động chứa các hành động đầu vào có liên quan, chẳng hạn như PlayContext cho các điều khiển nhân vật trong trò chơi và NavContext cho các điều khiển để điều hướng trong các menu UI. Bạn có thể bật/tắt bối cảnh (và các hành động tương ứng của chúng) thông qua thuộc tính Enabled, chẳng hạn như để bật NavContext khi menu vật phẩm mở và sau đó chuyển sang PlayContext khi người chơi đóng menu và quay lại chơi chính.

Ngay cả khi một trò chơi có thể không sử dụng nhiều bối cảnh đầu vào ngay từ đầu, thì việc tạo một bối cảnh chính ở cấp độ cao nhất của bất kỳ hệ thống đầu vào nào là điều được khuyến nghị, chẳng hạn như thể hiện instance của PlayContext cho các đầu vào xảy ra trong quá trình chơi.

  1. ĐƯỢC KHUYẾN NGHỊ
    Tạo một Folder có tên Inputs bên trong ReplicatedStorage để giữ các bối cảnh đầu vào khác nhau.

    Thư mục mới bên trong ReplicatedStorage, đã đổi tên thành Inputs
  2. Chèn một InputContext mới vào thư mục và đổi tên thành PlayContext.

    Instance InputContext mới bên trong ReplicatedStorage, đã đổi tên thành PlayContext
  3. Trong cửa sổ Thuộc tính, đặt Priority thành 2000 và bật Sink. Một bối cảnh có thuộc tính Sink được bật sẽ tiêu thụ các sự kiện đầu vào cho các KeyCodes đã liên kết của nó ở mức độ ưu tiên của nó, chặn các đầu vào đó không cho đến các bối cảnh có mức độ ưu tiên thấp hơn. Điều này thực tế cho các trường hợp sử dụng như một màn hình vật phẩm mà nên ngăn chặn các đầu vào trò chơi cụ thể trong khi mở. Trong ví dụ này, PlayContext được gán đủ mức Priority cao để tiêu thụ các đầu vào đã liên kết của nó trước khi các bối cảnh mặc định của PlayerScripts xử lý chúng.

Các hành động đầu vào

Một InputAction xác định một cơ chế hành động trò chơi như "Nhảy", "Chạy nhanh", hoặc "Bắn". Những hành động này sau đó được ánh xạ đến các đầu vào phần cứng bằng cách sử dụng các liên kết đầu vào.

Một InputAction có thể có nhiều biến thể tùy thuộc vào thuộc tính Type của nó (Enum.InputActionType). Mặc định là Bool, được thiết kế để nhận các giá trị true/false từ việc nhấn/thả của các đầu vào như ButtonA, E, hoặc MouseLeftButton.

Loại Hành động Đầu vàoVí dụ Sử dụng
BoolCác hành động được kích hoạt như nhảy, bắn, chạy nhanh, v.v. với hỗ trợ cho ngưỡng nhấn/thả trên các đầu vào analog.
Direction1DCác hành động thay đổi từ không đến toàn phần như bàn đạp tăng tốc của một chiếc xe hoặc cấp độ thu phóng của một ống ngắm.
Direction2DDi chuyển định hướng 2D như quay camera, hoặc chuyển động nhân vật Roblox chuẩn.
Direction3DDi chuyển định hướng 3D như một chiếc xe bay có thể bay lên/xuống, tăng tốc/giảm tốc, và trượt sang trái/phải.
ViewportPositionTọa độ viewport 2D như đầu vào chuột, chẳng hạn cho các con trỏ tùy chỉnh hoặc raycasting để chọn các đối tượng trong thế giới.

Để thử nghiệm một InputAction cho nhân vật chạy nhanh đơn giản:

  1. Tạo một InputAction mới bên trong bối cảnh PlayContext trong ReplicatedStorage. Đổi tên thành CharacterSprint để chỉ định hành động dành riêng của nó.

    Instance InputAction mới bên trong một InputContext, đã đổi tên thành CharacterSprint
  2. Trong cửa sổ Thuộc tính, lưu ý rằng Type của hành động là Bool (mặc định). Đây là một loại hợp lý cho việc chạy nhanh nhân vật đơn giản với hành động boolean true/false (nhân vật đang chạy nhanh hoặc không chạy nhanh).

    Thuộc tính Type của một InputAction được đặt thành Bool

Các liên kết đầu vào

Một InputBinding xác định liên kết phần cứng nào nên kích hoạt InputAction của cha, chẳng hạn như nhấn phím, nút gamepad, hoặc chạm vào thiết bị cảm ứng. Để đảm bảo tính tương thích đa nền tảng, mỗi InputAction nên có một InputBinding cho gamepad, bàn phím/chuột, và cảm ứng như minh họa dưới đây.

Loại Type được gán cho InputAction cha ảnh hưởng trực tiếp đến những loại đầu vào chung nào (phím/nút/chạm, kích hoạt analog, thumbstick, v.v.) là hợp lệ cho các instance InputBinding con. Ngược lại, các giá trị được gửi đến các sự kiện kết nối của hành động cha phụ thuộc vào loại đầu vào được chọn từ một liên kết. Xem các sự kiện đầu vào để biết chi tiết về mối tương quan giữa các loại hành động, các liên kết, và các giá trị trả về.

Để thiết lập các liên kết cho nhân vật chạy nhanh đơn giản:

  1. Chèn một InputBinding mới vào hành động CharacterSprint và đổi tên thành KeyboardBinding. Sau đó, đặt thuộc tính KeyCode của liên kết thành LeftShift.

  2. Để đảm bảo Shift của chuột không gây cản trở liên kết phím, hãy chọn StarterPlayer trong Explorer và vô hiệu hóa EnableMouseLockOption trong cửa sổ Thuộc tính.

  3. Chèn một InputBinding thứ hai vào hành động CharacterSprint và đổi tên thành GamepadBinding. Sau đó, đặt thuộc tính KeyCode của liên kết thành ButtonY.

  4. Bên trong một ScreenGui trong StarterGui, tạo một nút trên màn hình, đổi tên thành SprintButton, và định vị/thay đổi kích thước nó theo ý muốn.

  5. Chèn một InputBinding thứ ba vào hành động CharacterSprint và đổi tên thành TouchBinding. Sau đó, trong cửa sổ Thuộc tính, liên kết thuộc tính UIButton của liên kết với nút SprintButton mà bạn đã tạo trước đó trong StarterGui.

Các sự kiện đầu vào

Instance InputAction có ba sự kiện được tích hợp sẵn để xử lý đầu vào của người chơi từ InputBindings.

  • Pressed — Sự kiện này chỉ xảy ra khi loại của hành động đầu vào được thiết lập thành Bool, và chỉ khi trạng thái chuyển từ false sang true.
  • Released — Sự kiện này chỉ xảy ra khi loại của hành động đầu vào được thiết lập thành Bool, và chỉ khi trạng thái chuyển từ true sang false.
  • StateChanged — Sự kiện này xảy ra cho tất cả các loại hành động đầu vào bất cứ khi nào trạng thái thay đổi, ngoại trừ khi trạng thái cố gắng chuyển sang cùng một trạng thái.

Tùy thuộc vào Type của hành động đầu vào (Bool, Direction1D, Direction2D, Direction3D, hoặc ViewportPosition) và loại đầu vào chung đến từ một InputBinding con (phím/nút/chạm, kích hoạt analog, thumbstick, v.v.), các giá trị khác nhau được trả lại cho các trình xử lý sự kiện Pressed, Released, và StateChanged. Xem các bảng sau để hiểu rõ hơn về mối tương quan.

Loại Bool là tốt nhất cho các hành động kích hoạt như nhảy, bắn, chạy nhanh, v.v. với hỗ trợ cho ngưỡng nhấn/thả trên các đầu vào analog.

Các Loại Đầu vào Hợp lệ trên InputBindingsĐược Trả về cho InputAction Sự kiện
Các đầu vào boolean từ các phím bàn phím hoặc các nút cơ bản của chuột/gamepad thông qua thuộc tính KeyCode của liên kết, hoặc một lần nhấn/thả GuiButton thông qua thuộc tính UIButton của liên kết.
  • Sự kiện Pressed:
    • true khi nhấn
  • Sự kiện Released:
    • true khi thả
  • Sự kiện StateChanged:
    • true (đang nhấn) hoặc false (đã thả)
Các số lượng đầu vào biến đổi từ các đầu vào analog như các kích hoạt gamepad (ButtonL2/ButtonR2) thông qua thuộc tính KeyCode của liên kết.

Để kết nối các sự kiện cho nhân vật chạy nhanh đơn giản:

  1. Chèn một Script mới vào cây CharacterSprint, song song với các liên kết đầu vào khác nhau. Sau đó, đặt RunContext của nó thành Client và đổi tên thành OnActivate.

  2. Dán mã sau vào script OnActivate. Lưu ý rằng sự kết nối sự kiện Pressed ở các dòng 1315 nhân đôi tốc độ đi bộ của nhân vật khi một liên kết đầu vào chạy nhanh được nhấn, và sự kết nối sự kiện tương ứng Released ở các dòng 1618 sẽ đặt lại tốc độ đi bộ về mặc định khi một liên kết đầu vào chạy nhanh được thả.

    OnActivate (Client Script)

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
  3. Chơi thử trò chơi của bạn và thử nghiệm hành động chạy nhanh của nhân vật với các liên kết mà bạn đã chọn trước đó: LeftShift cho bàn phím, ButtonY cho gamepad, và nút trên màn hình SprintButton cho các thiết bị cảm ứng. Hãy nhớ rằng bạn có thể sử dụng Trình giả lập điều khiển để thử nghiệm các đầu vào gamepad trực tiếp trong Roblox Studio.

Thay đổi bối cảnh

Khi bạn đã có một bối cảnh đầu vào như PlayContext, bạn có thể bật/tắt nó trong quá trình chơi thông qua scripting, thay đổi thuộc tính Priority của nó để xác định các hành động nào có ưu tiên hơn các hành động khác, và Sink để ngăn các đầu vào được xử lý trong các bối cảnh có mức độ ưu tiên thấp hơn.

  1. Để dễ dàng chuyển đổi giữa các bối cảnh từ các script khác, hãy chèn một BindableEvent mới vào thư mục đầu vào của bạn trong ReplicatedStorage và đổi tên thành ContextEvent.

  2. Tạo một Script mới ở cùng cấp, đặt RunContext của nó thành Client, và đổi tên thành UpdateContext.

  3. Bên trong script UpdateContext, dán mã sau:

    UpdateContext (Client Script)

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    -- Kết nối sự kiện có thể gọi
    contextEvent.Event:Connect(function(targetContext, enabled)
    local context = inputsFolder:FindFirstChild(targetContext)
    if context then
    context.Enabled = enabled
    print(context.Name .. ": " .. tostring(context.Enabled))
    else
    warn("Không tìm thấy InputContext!")
    end
    end)
  4. Với script UpdateContext đã được thiết lập, bạn có thể cập nhật một InputContext có tên bằng cách kích hoạt sự kiện có thể gọi, chẳng hạn từ một LocalScript điều khiển một GuiButton bên trong một container ScreenGui.

    Nút Kịch bản

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    local button = script.Parent
    button.Activated:Connect(function()
    -- Kích hoạt sự kiện có thể gọi với bối cảnh đầu vào mục tiêu và trạng thái đã bật
    contextEvent:Fire("PlayContext", true)
    end)

Các liên kết mặc định

Roblox cung cấp các liên kết đầu vào mặc định cho chuyển động, điều khiển camera và tương tác cơ bản với môi trường — người chơi Roblox đã quen thuộc với những điều khiển này, vì vậy bạn chỉ nên ghi đè chúng trong những trường hợp cụ thể. Cũng lưu ý rằng các đầu vào đã được dự trữ không thể bị ghi đè và sẽ luôn hoạt động với mục đích của chúng.

Hành độngChuột/Bàn phímGamepadCảm ứng
Mở menu RobloxEscStart button (ButtonStart)Không có
Developer ConsoleF9Không cóKhông có
Chế độ toàn màn hình (Windows)
Hiển thị màn hình chính (Mac)
F11Không cóKhông có
Ghi video (Windows)F12Không cóKhông có
Chụp màn hìnhPrintScreenKhông cóKhông có
©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.