大多数 Roblox 会话都在设备上播放,因此设计体验以及为广阔的受众设置体验时,请确保正确支持这些输入。 一旦您对鼠标和键盘输入感到舒适,请通过设置移动和游戏手柄输入来兼容多个平台。
为了方便,Roblox 将最常见的鼠标和键盘输入设置为 默认绑定,除了保留的绑定外,您可以覆盖它们。
通用鼠标输入
像所有设备输入一样,您可以使用 UserInputService 捕获鼠标输入。 此服务提供可扩展的方法来捕获输入变更和设备输入状态为多个设备一次。 Roblox 也支持传统鼠标输入检测用于 PlayerMouse 和 ClickDetectors 。
此外,您可以使用 ContextActionService 来处理多个操作在单个输入上,根据上下文,例如使用工具靠近岩石,或打开门靠近建建造。请参阅 上下文独立输入 了解设置上下文独立输入操作。
当 LocalScript 放置在 StarterPlayerScripts 中时,当前 窗口 打印鼠标位置,并将鼠标位置打印到 2> 输出2> 窗口:
本地脚本 - 输出鼠标点击和位置
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 中工作。
当 StarterPlayerScripts 放置在 Enum.KeyCode 中时,打印 1> Class.KeyCode1> 的按钮键到 4> 输出4> 窗口:
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)
输入界面
鼠标和键盘输入自动与互动界面元素如 TextButtons 和 ImageButtons 以及 TextBoxes ,这些都捕获文本输入像形状中的一种字段。
有关创建按钮和文本输入对象的更多信息,请参阅按钮和输入文本。
角色移动模式
您可以通过修改 StarterPlayer.DevComputerMovementMode 的值来设置 Roblox 体验的鼠标和键盘移动控件,例关注中/正在关注:
选项 | 描述 |
---|---|
用户选择 | 允许用户在体验菜单中选择他们想要的控制计划。 此选项默认启用。 |
键盘鼠标 | 用户可以按 WASD 来移动和 1>空间1> 跳跃。这是键盘和鼠标用户的默认设置为 4>选择用户4> 设置。 |
点击移动 | 用户只能通过右击目标位置来移动体验。 |
可脚本化 | 禁用所有默认控件,允许您绑定您自己的控件。 |
鼠标图标
您可以在体验中自定义用户的鼠标图标的外观和行为,以在所有的 UI 元素上创建一种凝聚式风格。这包括在特定情况下暂时更改用户的鼠标图标,例如将鼠标悬停在按钮上。
改变图标
您可以通过在 LocalScript 中设置 MouseIcon 属性将其设置为自定义 Roblox 资产 ID 来改变用户的鼠标图标。例如,以下 UserInputService 将用户的默认鼠标图标设置为圆圈,中间有一个蓝色点:
local UserInputService = game:GetService("UserInputService")UserInputService.MouseIcon = "rbxassetid://3400146391"
隐藏图标
您可以通过将 UserInputService.MouseIconEnabled 设置为 false 中的 LocalScript 隐藏用户的鼠标图标。例如,以下代码将鼠标图标从可见到隐藏,并在每两秒钟回到 2>Class.LocalScript2> 中:
local UserInputService = game:GetService("UserInputService")while true dotask.wait(2)UserInputService.MouseIconEnabled = falsetask.wait(2)UserInputService.MouseIconEnabled = trueend
锁定图标
您可以使用 UserInputService.MouseBehavior 使鼠标标志的位置固定在屏幕上,使用 Enum.MouseBehavior 的值 LockCurrentPosition 或 1> Class.UserInputService.LockCenter1> 来解锁它,然后再次使用 4> Class.UserInputService
如果用户的鼠标图标在一个位置锁定,UserInputService.InputChanged 仍然会在用户移动鼠标时触发,并且在距离鼠标移动的距离上传行距离。例如,以下代码示例会在一秒后锁定用户的鼠标图标,然后 Studio 会每次用户移动鼠标时打印鼠标 Delta:
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 为所有体验提供默认键binding。这些是移动、相机控制和基础环境互动的最常见输入。 除了保留的binding外,您可以使用 ContextActionService 来创建平台间的绑定,优先考虑多个绑ing到单个操动作,如在 上下文独立输入 中所述。
Enum.CoreGuiType 功能,例如 背包 或 聊天 ,有一个列表额外的默认输入。您无法覆盖保留输入,例如0> Esc0> (Roblox菜单)或Enum.CoreGuiType3> (开发者控制器)。
这些绑定是 Roblox 默认值,但您可以通过自定义脚本来覆盖它们。大多数 Roblox 用户都熟悉这些控制件,因此您在特定情况下应该覆盖它们。
输入 | 行动 |
---|---|
W ↑ | 向前移动 |
S ↓ | 移返回 |
A) | 向左移动 |
D | 向右移动 |
空格键 | 跳跃 |
← → | 左或右旋转相机 |
鼠标右键 | 按下时,拖动鼠标将相机视图移动 |
鼠标滚轮 I O | 将相机放大或缩小 |
Shift | 切换鼠标锁定,如果 EnableMouseLockOption 已启用 |