大部分 Roblox 会话在使用鼠标和键盘的设备上播放,因此在设计面向广泛受众的体验时,支持这些输入是很重要的。一旦你熟悉了鼠标和键盘输入,通过设置移动和游戏手柄输入,让你的体验在多个平台上兼容。
为了方便,Roblox将最常见的鼠标和键盘输入设置为默认绑定,除了保留的绑定外,您可以覆盖。
通用鼠标输入
像所有设备输入一样,你可以使用 UserInputService 来捕获鼠标输入。该服务提供了一种可扩展的方法来捕获多个设备的输入更改和设备输入状态。Roblox 还支持遗产鼠标输入检测与 PlayerMouse 和 ClickDetectors 。
此外,您可以使用 ContextActionService 来根据上下文处理单个输入上的多个操作,例如在岩石附近使用工具或在建建造内打开门。请参阅上下文依赖输入以获取关于设置上下文特定输入操作的信息。
以下 LocalScript , 放置在 StarterPlayerScripts 时, 捕获鼠标点击并将鼠标位置打印到 输出窗口 :
本地脚本 - 输出鼠标点击和位置
local UserInputService = game:GetService("UserInputService")
local function onInputEnded(inputObject, processedEvent)
-- 首先检查“处理事件”是否为真
-- 这表示另一个脚本已经处理了输入,因此此脚本被忽略
if processedEvent then return end
-- 接下来,检查输入是否是鼠标事件
if inputObject.UserInputType == Enum.UserInputType.MouseButton1 then
print("Left Mouse button was pressed:", inputObject.Position)
elseif inputObject.UserInputType == Enum.UserInputType.MouseButton2 then
print("Right Mouse button was pressed:", inputObject.Position)
end
end
UserInputService.InputEnded:Connect(onInputEnded)
通用键盘输入
要访问键盘事件,使用 UserInputService.InputEnded 事件来跟踪任何键入或其他输入结束时。与 鼠标 事件类似,此事件仅在 LocalScript 内工作。
以下 , 放置在 时,将按下的键的 打印到 输出窗口:
local UserInputService = game:GetService("UserInputService")
local function onInputEnded(inputObject, processedEvent)
-- 首先检查“处理事件”是否为真
-- 这表示另一个脚本已经处理了输入,因此此脚本被忽略。
if processedEvent then return end
-- 接下来,检查输入是否是键盘事件
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
print("A key was released: " .. inputObject.KeyCode.Name)
end
end
UserInputService.InputEnded:Connect(onInputEnded)
用户输入
鼠标和键盘输入会自动与互动用户界面元素(例如 和 以及 )以及像表单中字段一样捕获文本输入的 一起工作。
了解有关创建按钮和文本输入对象的更多信息,请参阅按钮和文本输入。
角色移动模式
您可以通过修改 StarterPlayer.DevComputerMovementMode 的值为关注中/正在关注列之一来设置 Roblox 体验的鼠标和键盘移动控制方案:
选项 | 描述 |
---|---|
用户选择 | 允许用户从体验菜单中选择他们想要的控制模式。此选项默认启用。 |
键盘鼠标 | 用户可以按下 来移动和跳跃。这是键盘和鼠标用户的默认设置,用于 用户选择 设置。 |
点击移动 | 用户只能通过右键单击目标位置来移动体验。 |
可脚本化 | 禁用所有默认控件,允许您绑定自己的控件。 |
鼠标图标
您可以在体验中自定义用户鼠标图标的外观和行为,以在所有的 UI 元素中创建一致的风格。这包括在特定情况下暂时更改用户的鼠标图标,例如悬停在按钮上。
更改标志
您可以在 LocalScript 中更改用户的鼠标图标,通过设置 MouseIcon 属性在 UserInputService 为自定义 Roblox 资产 ID来实现。例如,以下 LocalScript 将用户的默认鼠标图标更改为中间有蓝点的圆圈:
local UserInputService = game:GetService("UserInputService")UserInputService.MouseIcon = "rbxassetid://3400146391"
隐藏标志
您可以通过设置 UserInputService.MouseIconEnabled 将用户的鼠标图标隐藏为 false 在 LocalScript 中。例如,以下代码每两秒切换鼠标图标从可见到不可见,然后返回:
local UserInputService = game:GetService("UserInputService")while true dotask.wait(2)UserInputService.MouseIconEnabled = falsetask.wait(2)UserInputService.MouseIconEnabled = trueend
锁定标志
您可以使用 UserInputService.MouseBehavior 将鼠标标志的位置锁定在屏幕上,然后使用 Enum.MouseBehavior 值 LockCurrentPosition 或 LockCenter 将其再次解锁,或使用 Default 值将其再次解锁。
如果用户的鼠标图标被锁定在某个位置,UserInputService.InputChanged仍然会在用户移动鼠标时触发,传递鼠标移动的距离。例如,以下代码示例在一秒钟后锁定用户的鼠标图标,然后 Studio 每当用户移动鼠标时都会打印鼠标差异:
local UserInputService = game:GetService("UserInputService")
task.wait(5)
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
UserInputService.InputChanged:Connect(function(inputObject)
if inputObject.UserInputType == Enum.UserInputType.MouseMovement then
print("Mouse delta is (" .. tostring(inputObject.Delta.X) .. ", " .. tostring(inputObject.Delta.Y) .. ")")
end
end)
Roblox 默认绑定
Roblox 为所有体验提供默认键绑定。这些是用于移动、相机控制和基本环境互动的最常见的输入。排除保留的绑定后,您可以使用 ContextActionService 创建跨平台绑定,将多个绑定优先给予单个操动作,如描述在 上下文依赖输入 中。
Enum.CoreGuiType 功能,例如 背包 或 聊天 ,有一个列表额外的默认输入。您不能覆盖保留输入,例如 Esc (Roblox 菜单)或 F9 (开发者控制台)。
这些绑定是 Roblox 默认值,但您可以用自定义脚本覆盖它们。大多数 Roblox 用户熟悉这些控制件,因此您只应在特定情况下覆盖它们。
输入 | 行动 |
---|---|
W ↑ | 向前移动 |
S ↓ | 移返回 |
A | 向左移动 |
D | 向右移动 |
Spacebar | 跳 |
← → | 向左或向右旋转相机 |
右键鼠标按钮 | 按下时,拖动鼠标将相机视图移动 |
鼠标滚轮 I O | 将相机放大或缩小 |
Shift | 如果 EnableMouseLockOption 启用,切换鼠标锁定功能 |