每个游戏都需要接收用户输入,以便玩家与环境进行互动和查看。Roblox 支持几乎所有形式的输入,包括 鼠标/键盘、触摸、游戏手柄 和 VR。
跨平台输入
Roblox 本身就是 跨平台 的,玩家可以在手机或平板电脑上发现并加入游戏,然后在 PC 或控制台上继续他们的游戏进程。输入在跨平台开发计划中尤其重要。
为了简化这个过程,Roblox 提供了 输入操作系统,用于定义 操作,例如“跳跃”、“冲刺”或“射击”,并为多个硬件输入设置 绑定 来驱动这些操作。这使您不必考虑所有技术方面的硬件输入,而只需定义哪些输入执行哪些操作。

输入类型检测
在跨平台开发中,确定并响应玩家正在使用的 主要 输入类型是很重要的,通常是为了确保 UI 元素(例如屏幕上的按钮和菜单)在不同设备上可以优雅地工作。
例如,启用了触摸的设备假设触摸是默认输入,并且可以为操作显示触摸按钮,但如果玩家连接了额外的蓝牙键盘/鼠标或游戏手柄,您可以假设他们希望将其切换为 主要 输入类型,并可能使用触摸作为屏幕 UI 的备用输入。只读属性 UserInputService.PreferredInput 是测试和适应多种输入类型的方便方法,基于预期的玩家行为。
PreferredInput 的值会根据内置设备输入和玩家最近与连接的游戏手柄或键盘/鼠标的交互而变化。例如:
| 真实场景 | PreferredInput |
|---|---|
| 玩家使用的是没有其他连接输入设备的手机;没有输入类型更改的可能性。 | Touch |
| 玩家使用的是连接了蓝牙键盘和鼠标的移动设备,但没有连接游戏手柄。 | KeyboardAndMouse |
| 玩家使用的是连接了蓝牙游戏手柄但没有连接键盘或鼠标的平板电脑。 | Gamepad |
| 玩家在连接了蓝牙键盘和鼠标的 Xbox 或 PlayStation 上,并且最近与键盘或鼠标进行了交互。 | KeyboardAndMouse |
| 玩家在连接了游戏手柄的 Windows 或 Mac 电脑上,并且最近与游戏手柄进行了交互。 | Gamepad |
以下 LocalScript 是用于初步检测首选输入并在游戏过程中响应变化的模板。
PreferredInput detection
local UserInputService = game:GetService("UserInputService")
local function preferredInputChanged()
local preferredInput = UserInputService.PreferredInput
if preferredInput == Enum.PreferredInput.Touch then
-- 玩家使用的是没有其他输入类型可用/连接的触摸设备
print("触摸")
elseif preferredInput == Enum.PreferredInput.Gamepad then
-- 玩家已连接或最近与游戏手柄进行交互
print("游戏手柄")
elseif preferredInput == Enum.PreferredInput.KeyboardAndMouse then
-- 玩家已连接或最近与键盘或鼠标进行交互
print("键盘和鼠标")
end
end
preferredInputChanged()
UserInputService:GetPropertyChangedSignal("PreferredInput"):Connect(function()
preferredInputChanged()
end)
默认绑定
Roblox提供了默认的输入绑定,用于移动、相机控制和基本的环境交互 — Roblox玩家熟悉这些控制,因此你应该仅在特定情况下覆盖它们。还要注意,保留的输入无法被覆盖,并且将始终以其预期的方式进行操作。
| 动作 | 鼠标/键盘 | 游戏手柄 | 触控 |
|---|---|---|---|
| 打开Roblox菜单 | Esc | Start 按钮 (ButtonStart) | 不适用 |
| 开发者控制台 | F9 | 不适用 | 不适用 |
| 全屏模式 (Windows) 显示桌面 (Mac) | F11 | 不适用 | 不适用 |
| 录制视频 (Windows) | F12 | 不适用 | 不适用 |
| 截图 | PrintScreen | 不适用 | 不适用 |