輸入操作系統

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

跨平台的 輸入操作系統 讓您在編輯時連接 動作 並安排 綁定 不同的硬體輸入。結合 上下文,您可以輕鬆地配置和編輯一個模組化的輸入系統,適用於任何設備的任何遊玩階段。使用案例包括:

  • 一個第一人稱射擊系統,其動作根據玩家在戰鬥模式或觀察者模式中動態互換。
  • 一個全面的駕駛系統,具備加速/減速、汽車加速器和加油站。
  • 在戰鬥遊戲中按熱鍵切換技能系統中的動作,讓玩家不會錯過攻擊。

輸入上下文

InputContext 是一組動作的集合,其中包含相關的 輸入動作,例如 PlayContext 是用於遊戲中角色控制的上下文,而 NavContext 是用於在 UI 菜單中導航的控制。您可以通過 Enabled 屬性 啟用/禁用上下文(及其相應的動作),例如當開啟庫存菜單時啟用 NavContext,然後在玩家關閉菜單並返回主遊玩時切換到 PlayContext

即使遊戲最初不使用多個輸入上下文,仍建議在任何輸入系統的最上層創建一個主要上下文,例如在遊戲過程中發生的輸入的 PlayContext 實例。

  1. 建議
    ReplicatedStorage 中創建一個名為 InputsFolder 來保存各種輸入上下文。

    在 ReplicatedStorage 中內的新文件夾,重新命名為 Inputs
  2. 將一個新的 InputContext 插入該資料夾並將其重命名為 PlayContext

    在 ReplicatedStorage 裡的新 InputContext 實例,重新命名為 PlayContext
  3. 屬性 窗口中,将 Priority 的值設置為 2000,並啟用 Sink。啟用 Sink 的上下文在其優先級別中消耗其綁定的 KeyCodes 的輸入事件,阻止這些輸入到達較低優先級的上下文。這在開啟庫存螢幕時很實用,它應該壓制特定的遊戲輸入。在這個例子中,PlayContext 被給予足夠高的 Priority 以在預設的 PlayerScripts 上下文處理之前消耗其綁定的輸入。

輸入動作

InputAction 定義了一個遊戲動作機制,例如「跳躍」、「衝刺」或「射擊」。這些動作然後使用 輸入綁定 來映射到硬體輸入。

InputAction 可以根據其 Type 屬性(Enum.InputActionType)有幾種變化。預設為 Bool,設計用於接收來自按下/釋放的輸入值 true/false,例如 ButtonAEMouseLeftButton

輸入 動作 類型示例使用情況
Bool觸發的動作,例如跳躍、射擊、衝刺等,支援類比輸入的按下/釋放閾值。
Direction1D變化的零到全力動作,例如汽車的油門踏板或視角縮放等級。
Direction2D2D 方向運動,例如相機旋轉,或標準的 Roblox 角色移動。
Direction3D3D 方向運動,例如能夠上升/下降、加速/減速、左右漂移的空中載具。
ViewportPosition例如鼠標輸入的 2D 視口坐標,用於自定義游標或射線投射以選擇世界物體。

要測試簡單角色衝刺的 InputAction

  1. ReplicatedStorage 中的 PlayContext 上下文內創建一個新的 InputAction,並將其重命名為「CharacterSprint」,以表示其專用動作。

    在 InputContext 中的新 InputAction 實例,重新命名為 CharacterSprint
  2. 屬性 窗口中,注意動作的 TypeBool(預設)。這是一種對於簡單角色衝刺作為布林 true/false 動作(角色要麼在衝刺,要麼不在衝刺)的合邏輯類型。

    一個 InputAction 的 Type 屬性設置為 Bool

輸入綁定

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

分配給父 InputActionType 會直接影響哪些通用輸入類型(鍵/按鈕/點擊、類比觸發、搖桿等)對於子 InputBinding 實例是有效的。反過來,傳送到父動作的連接事件的值取決於綁定選擇的輸入類型。請參見 輸入事件 以獲取有關動作類型、綁定和返回值之間關聯的詳細信息。

要連接簡單角色衝刺的綁定:

  1. CharacterSprint 動作中插入一個新的 InputBinding 並將其重命名為 KeyboardBinding。然後將綁定的 KeyCode 屬性設置為 LeftShift

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

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

  4. StarterGui 中的 ScreenGui 容器內創建一個 螢幕按鈕,將其重命名為 SprintButton,並根據需要 定位/調整大小

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

輸入事件

InputAction 實例有三個內建的 事件 用於處理來自 InputBindings 的玩家輸入。

  • Pressed — 僅當輸入動作的 Type 設置為 Bool 時,並且僅當狀態從 false 轉換為 true 時才會觸發此事件。
  • Released — 僅當輸入動作的 Type 設置為 Bool 時,並且僅當狀態從 true 轉換為 false 時才會觸發此事件。
  • StateChanged — 此事件在所有輸入動作類型中,在狀態變更時觸發,除了當狀態嘗試轉換為相同狀態時。

根據輸入動作的 TypeBoolDirection1DDirection2DDirection3DViewportPosition)及來自子 InputBinding 的一般輸入類型(鍵/按鈕/觸摸、類比觸發、搖桿等),PressedReleasedStateChanged 事件處理程序將返回不同的值。檢查以下表格以更好地理解它們之間的關聯。

Bool 類型最適合用於像跳躍、射擊、衝刺等觸發動作,並支援類比輸入的按下/釋放閾值。

有效輸入類型在 InputBindings返回到 InputAction 的事件
來自鍵盤按鍵或透過綁定的 KeyCode 屬性的基本鼠標/遊戲手把按鈕的布林輸入,或來自綁定的 UIButton 屬性的 GuiButton 按下/釋放。
來自類比輸入的變量輸入量,例如遊戲手把觸發器(ButtonL2/ButtonR2)通過綁定的 KeyCode 屬性。

要連接簡單角色衝刺的事件:

  1. CharacterSprint 樹中插入一個新的 Script,與各種輸入綁定並排。然後將其 RunContext 設置為 Client,並將其重命名為 OnActivate

  2. 將以下代碼粘貼到 OnActivate 腳本中。注意第 13 行至第 15 行的 Pressed 事件連接,當衝刺輸入綁定被按下時,它將角色的行走速度加倍,而在第 16 行至第 18 行的 Released 事件連接則在釋放衝刺輸入綁定時將行走速度重置為預設。

    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. 測試您的遊戲,並使用您之前選擇的綁定測試角色衝刺動作:鍵盤的 LeftShift、遊戲手把的 ButtonY 及觸控設備上的螢幕 SprintButton。記得您可以使用 控制器模擬器 直接在 Roblox Studio 中測試遊戲手把輸入。

上下文變更

一旦您擁有一個 輸入上下文,例如 PlayContext,您可以在遊玩過程中通過腳本啟用/禁用它,變更其 Priority 以決定哪些動作優先於其他動作,並讓 Sink 從較低優先權的上下文中處理輸入。

  1. 為了方便從其他腳本切換上下文,在 ReplicatedStorage 中的輸入資料夾中插入一個新的 BindableEvent 並將其重命名為 ContextEvent

  2. 在同一層級上創建一個新的 Script,設置其 RunContextClient,並將其重命名為 UpdateContext

  3. 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 then
    context.Enabled = enabled
    print(context.Name .. ": " .. tostring(context.Enabled))
    else
    warn("找不到 InputContext!")
    end
    end)
  4. UpdateContext 腳本已設置,您現在可以通過觸發可綁定事件來更新命名的 InputContext,例如從驅動 GuiButtonLocalScript

    按鈕腳本

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    local button = script.Parent
    button.Activated:Connect(function()
    -- 觸發可綁定事件與目標輸入上下文和啟用狀態
    contextEvent:Fire("PlayContext", true)
    end)

預設綁定

Roblox 提供了默認的輸入綁定,以用於移動、相機控制和基本環境互動 — Roblox 玩家對這些控制非常熟悉,因此您僅應在特定情況下覆蓋它們。還要注意,保留的輸入無法被覆蓋,並將始終按照其預期目的運作。

動作鼠標/鍵盤遊戲手把觸控
打開 Roblox 菜單Esc開始 按鈕 (ButtonStart)不適用
開發者控制台F9不適用不適用
全螢幕模式 (Windows)
顯示桌面 (Mac)
F11不適用不適用
錄製視頻 (Windows)F12不適用不適用
截取屏幕PrintScreen不適用不適用
©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。