大多数Roblox会话都是在移动设备上进行的,因此在为广泛受众设计游戏时,考虑移动 设备方向 和其他 跨平台 因素非常重要。
为了简化跨平台输入,包括玩家与虚拟按钮的交互,Roblox提供了 输入动作系统,用于定义 动作(例如“跳跃”、“冲刺”或“射击”)并设置 绑定,以便多种硬件输入驱动这些动作。
Roblox还支持本机移动功能,如 触觉反馈、触摸手势,例如 TouchSwipe 和 TouchPinch,以及在 AccelerometerEnabled 和 GyroscopeEnabled 设备上的加速度计和陀螺仪功能。
输入类型检测
在跨平台开发中,确定并响应玩家使用的 PreferredInput 类型非常重要,通常是为了确保 UI 元素(如屏幕按钮和菜单)优雅地工作,并支持跨设备的交互。
例如,触摸支持的设备假定触摸是默认输入,并且可能会出现触摸按钮用于某些动作,但玩家可能选择连接蓝牙游戏手柄。在这种情况下,触摸仍然是有效输入,但您可以假定玩家希望将连接的游戏手柄作为 主要 输入类型,并可能使用触摸作为屏幕UI的备用输入。
请参阅 输入类型检测 以获取更多信息。
设备方向
默认情况下,Roblox游戏以 横屏 模式运行,允许游戏在玩家的设备旋转时在横屏“左”和横屏“右”之间切换。然而,如果需要,游戏可以锁定到特定方向。
有五种不同的方向模式,包括两种基于传感器的模式和三种锁定模式。¹ 可以通过 StarterGui.ScreenOrientation 设置这些模式为 默认 方向,该属性可以通过Studio的 属性 窗口访问。
| 传感器模式 | |
|---|---|
| LandscapeSensor | 默认的Roblox设置,游戏始终以横屏模式显示(无纵屏模式),并且设备检测其物理方向,以确保游戏视图始终朝上。 |
| Sensor | 设备检测其物理方向,以确保游戏视图始终朝上,根据需要在横屏和纵屏模式之间切换。 |
| 锁定模式 | |
| LandscapeLeft | 在具有虚拟主页/导航栏的设备上,触摸区域位于显示屏底部。在具有物理主页按钮的设备上,主页按钮位于显示屏左侧。 |
| LandscapeRight | 在具有虚拟主页/导航栏的设备上,触摸区域位于显示屏底部。在具有物理主页按钮的设备上,主页按钮位于显示屏右侧。 |
| Portrait | 在具有虚拟主页/导航栏的设备上,触摸区域位于显示屏底部。在具有物理主页按钮的设备上,主页按钮位于显示屏底部。 |
除了默认的 StarterGui.ScreenOrientation 属性外,您还可以通过 PlayerGui.ScreenOrientation 在游戏中更改方向。当游戏需要强制某个方向时,这可能很有用,例如将视图锁定为 Portrait 以进行迷你游戏。
以下代码在 LocalScript 中设置屏幕方向为纵屏,经过短暂延迟后执行:
LocalScript - 更改屏幕方向为纵屏local Players = game:GetService("Players")local player = Players.LocalPlayerlocal playerGui = player.PlayerGuitask.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,例如 GameplayCollision 或 UIClick。
一旦有了 HapticEffect,您可以通过 Play() 方法来启动它,例如:
local Workspace = game:GetService("Workspace")local effect = Instance.new("HapticEffect")effect.Type = Enum.HapticEffectType.GameplayExplosioneffect.Parent = Workspace-- 播放触觉效果effect:Play()