跨平台的 輸入操作系統 讓您在編輯時連接 動作 並安排 綁定 不同的硬體輸入。結合 上下文,您可以輕鬆地配置和編輯一個模組化的輸入系統,適用於任何設備的任何遊玩階段。使用案例包括:
- 一個第一人稱射擊系統,其動作根據玩家在戰鬥模式或觀察者模式中動態互換。
- 一個全面的駕駛系統,具備加速/減速、汽車加速器和加油站。
- 在戰鬥遊戲中按熱鍵切換技能系統中的動作,讓玩家不會錯過攻擊。
輸入上下文
InputContext 是一組動作的集合,其中包含相關的 輸入動作,例如 PlayContext 是用於遊戲中角色控制的上下文,而 NavContext 是用於在 UI 菜單中導航的控制。您可以通過 Enabled 屬性 啟用/禁用上下文(及其相應的動作),例如當開啟庫存菜單時啟用 NavContext,然後在玩家關閉菜單並返回主遊玩時切換到 PlayContext。
即使遊戲最初不使用多個輸入上下文,仍建議在任何輸入系統的最上層創建一個主要上下文,例如在遊戲過程中發生的輸入的 PlayContext 實例。
將一個新的 InputContext 插入該資料夾並將其重命名為 PlayContext。

輸入動作
InputAction 定義了一個遊戲動作機制,例如「跳躍」、「衝刺」或「射擊」。這些動作然後使用 輸入綁定 來映射到硬體輸入。
InputAction 可以根據其 Type 屬性(Enum.InputActionType)有幾種變化。預設為 Bool,設計用於接收來自按下/釋放的輸入值 true/false,例如 ButtonA、E 或 MouseLeftButton。
| 輸入 動作 類型 | 示例使用情況 |
|---|---|
| Bool | 觸發的動作,例如跳躍、射擊、衝刺等,支援類比輸入的按下/釋放閾值。 |
| Direction1D | 變化的零到全力動作,例如汽車的油門踏板或視角縮放等級。 |
| Direction2D | 2D 方向運動,例如相機旋轉,或標準的 Roblox 角色移動。 |
| Direction3D | 3D 方向運動,例如能夠上升/下降、加速/減速、左右漂移的空中載具。 |
| ViewportPosition | 例如鼠標輸入的 2D 視口坐標,用於自定義游標或射線投射以選擇世界物體。 |
要測試簡單角色衝刺的 InputAction:
在 ReplicatedStorage 中的 PlayContext 上下文內創建一個新的 InputAction,並將其重命名為「CharacterSprint」,以表示其專用動作。

輸入綁定
InputBinding 定義了哪些硬體綁定應該觸發父 InputAction,例如按鍵、遊戲手把按鈕或在觸控設備上點擊。為了實現 跨平台 兼容性,每個 InputAction 應具有一個 遊戲手把、鍵盤/鼠標 和 觸控 的 InputBinding,如這裡所示。

分配給父 InputAction 的 Type 會直接影響哪些通用輸入類型(鍵/按鈕/點擊、類比觸發、搖桿等)對於子 InputBinding 實例是有效的。反過來,傳送到父動作的連接事件的值取決於綁定選擇的輸入類型。請參見 輸入事件 以獲取有關動作類型、綁定和返回值之間關聯的詳細信息。
要連接簡單角色衝刺的綁定:
在 CharacterSprint 動作中插入一個新的 InputBinding 並將其重命名為 KeyboardBinding。然後將綁定的 KeyCode 屬性設置為 LeftShift。


為了確保鼠標 Shift 鎖定不會干擾按鍵綁定,在 Explorer 中選擇 StarterPlayer,並在 屬性 窗口中禁用其 EnableMouseLockOption。


在 CharacterSprint 動作中插入第二個 InputBinding,並將其重命名為 GamepadBinding。然後將綁定的 KeyCode 屬性設置為 ButtonY。


在 CharacterSprint 動作中插入第三個 InputBinding,並將其重命名為 TouchBinding。然後,在 屬性 窗口中,將綁定的 UIButton 屬性鏈接到您之前在 StarterGui 中創建的 SprintButton 按鈕。


輸入事件
InputAction 實例有三個內建的 事件 用於處理來自 InputBindings 的玩家輸入。
- StateChanged — 此事件在所有輸入動作類型中,在狀態變更時觸發,除了當狀態嘗試轉換為相同狀態時。
根據輸入動作的 Type(Bool、Direction1D、Direction2D、Direction3D 或 ViewportPosition)及來自子 InputBinding 的一般輸入類型(鍵/按鈕/觸摸、類比觸發、搖桿等),Pressed、Released 和 StateChanged 事件處理程序將返回不同的值。檢查以下表格以更好地理解它們之間的關聯。
Bool 類型最適合用於像跳躍、射擊、衝刺等觸發動作,並支援類比輸入的按下/釋放閾值。
| 有效輸入類型在 InputBindings | 返回到 InputAction 的事件 |
|---|---|
| 來自鍵盤按鍵或透過綁定的 KeyCode 屬性的基本鼠標/遊戲手把按鈕的布林輸入,或來自綁定的 UIButton 屬性的 GuiButton 按下/釋放。 |
|
| 來自類比輸入的變量輸入量,例如遊戲手把觸發器(ButtonL2/ButtonR2)通過綁定的 KeyCode 屬性。 |
|
要連接簡單角色衝刺的事件:
在 CharacterSprint 樹中插入一個新的 Script,與各種輸入綁定並排。然後將其 RunContext 設置為 Client,並將其重命名為 OnActivate。

將以下代碼粘貼到 OnActivate 腳本中。注意第 13 行至第 15 行的 Pressed 事件連接,當衝刺輸入綁定被按下時,它將角色的行走速度加倍,而在第 16 行至第 18 行的 Released 事件連接則在釋放衝刺輸入綁定時將行走速度重置為預設。
OnActivate (Client Script)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)
上下文變更
一旦您擁有一個 輸入上下文,例如 PlayContext,您可以在遊玩過程中通過腳本啟用/禁用它,變更其 Priority 以決定哪些動作優先於其他動作,並讓 Sink 從較低優先權的上下文中處理輸入。
為了方便從其他腳本切換上下文,在 ReplicatedStorage 中的輸入資料夾中插入一個新的 BindableEvent 並將其重命名為 ContextEvent。

在同一層級上創建一個新的 Script,設置其 RunContext 為 Client,並將其重命名為 UpdateContext。

在 UpdateContext 腳本中粘貼以下代碼:
UpdateContext (Client Script)local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")-- 連接可綁定事件contextEvent.Event:Connect(function(targetContext, enabled)local context = inputsFolder:FindFirstChild(targetContext)if context thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("找不到 InputContext!")endend)當 UpdateContext 腳本已設置,您現在可以通過觸發可綁定事件來更新命名的 InputContext,例如從驅動 GuiButton 的 LocalScript。
按鈕腳本local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- 觸發可綁定事件與目標輸入上下文和啟用狀態contextEvent:Fire("PlayContext", true)end)
預設綁定
Roblox 提供了默認的輸入綁定,以用於移動、相機控制和基本環境互動 — Roblox 玩家對這些控制非常熟悉,因此您僅應在特定情況下覆蓋它們。還要注意,保留的輸入無法被覆蓋,並將始終按照其預期目的運作。
| 動作 | 鼠標/鍵盤 | 遊戲手把 | 觸控 |
|---|---|---|---|
| 打開 Roblox 菜單 | Esc | 開始 按鈕 (ButtonStart) | 不適用 |
| 開發者控制台 | F9 | 不適用 | 不適用 |
| 全螢幕模式 (Windows) 顯示桌面 (Mac) | F11 | 不適用 | 不適用 |
| 錄製視頻 (Windows) | F12 | 不適用 | 不適用 |
| 截取屏幕 | PrintScreen | 不適用 | 不適用 |



