移动输入

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

大多数Roblox会话都是在移动设备上进行的,因此在为广泛受众设计游戏时,考虑移动 设备方向 和其他 跨平台 因素非常重要。

为了简化跨平台输入,包括玩家与虚拟按钮的交互,Roblox提供了 输入动作系统,用于定义 动作(例如“跳跃”、“冲刺”或“射击”)并设置 绑定,以便多种硬件输入驱动这些动作。

Roblox还支持本机移动功能,如 触觉反馈、触摸手势,例如 TouchSwipeTouchPinch,以及在 AccelerometerEnabledGyroscopeEnabled 设备上的加速度计和陀螺仪功能。

输入类型检测

在跨平台开发中,确定并响应玩家使用的 PreferredInput 类型非常重要,通常是为了确保 UI 元素(如屏幕按钮和菜单)优雅地工作,并支持跨设备的交互。

例如,触摸支持的设备假定触摸是默认输入,并且可能会出现触摸按钮用于某些动作,但玩家可能选择连接蓝牙游戏手柄。在这种情况下,触摸仍然是有效输入,但您可以假定玩家希望将连接的游戏手柄作为 主要 输入类型,并可能使用触摸作为屏幕UI的备用输入。

请参阅 输入类型检测 以获取更多信息。

设备方向

默认情况下,Roblox游戏以 横屏 模式运行,允许游戏在玩家的设备旋转时在横屏“左”和横屏“右”之间切换。然而,如果需要,游戏可以锁定到特定方向。

有五种不同的方向模式,包括两种基于传感器的模式和三种锁定模式。¹ 可以通过 StarterGui.ScreenOrientation 设置这些模式为 默认 方向,该属性可以通过Studio的 属性 窗口访问。

传感器模式
LandscapeSensor默认的Roblox设置,游戏始终以横屏模式显示(无纵屏模式),并且设备检测其物理方向,以确保游戏视图始终朝上。
Sensor设备检测其物理方向,以确保游戏视图始终朝上,根据需要在横屏和纵屏模式之间切换。
锁定模式
LandscapeLeft在具有虚拟主页/导航栏的设备上,触摸区域位于显示屏底部。在具有物理主页按钮的设备上,主页按钮位于显示屏左侧。
LandscapeRight在具有虚拟主页/导航栏的设备上,触摸区域位于显示屏底部。在具有物理主页按钮的设备上,主页按钮位于显示屏右侧。
Portrait在具有虚拟主页/导航栏的设备上,触摸区域位于显示屏底部。在具有物理主页按钮的设备上,主页按钮位于显示屏底部。
¹ Roblox没有包含“纵屏倒置”模式,因为许多设备不原生支持该方向


除了默认的 StarterGui.ScreenOrientation 属性外,您还可以通过 PlayerGui.ScreenOrientation 在游戏中更改方向。当游戏需要强制某个方向时,这可能很有用,例如将视图锁定为 Portrait 以进行迷你游戏。

以下代码在 LocalScript 中设置屏幕方向为纵屏,经过短暂延迟后执行:

LocalScript - 更改屏幕方向为纵屏

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local playerGui = player.PlayerGui
task.wait(5)
playerGui.ScreenOrientation = Enum.ScreenOrientation.Portrait

最后,您可以通过监听 PlayerGui.CurrentScreenOrientation 属性的值变化来检测游戏中屏幕方向的变化。

LocalScript - 检测屏幕方向变化

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local playerGui = player.PlayerGui
local function onOrientationChange()
print("方向已更改为", playerGui.ScreenOrientation)
end
playerGui:GetPropertyChangedSignal("ScreenOrientation"):Connect(onOrientationChange)

触觉反馈

大多数移动设备内置有电机以提供触觉反馈。添加震动和颤动可以大大增强玩家的体验,并提供超越视觉或音频的细腻反馈。

Roblox支持触觉反馈,适用于支持触觉的设备,包括大多数iPhone、Pixel和Samsung Galaxy设备。触觉反馈是通过 HapticEffect 实例进行管理的,可以设置为特定的 Type,例如 GameplayCollisionUIClick

一旦有了 HapticEffect,您可以通过 Play() 方法来启动它,例如:


local Workspace = game:GetService("Workspace")
local effect = Instance.new("HapticEffect")
effect.Type = Enum.HapticEffectType.GameplayExplosion
effect.Parent = Workspace
-- 播放触觉效果
effect:Play()
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。