可达性是设计产品和服务以使残疾人士可用的实践。最近的统计数据显示,超过26%的人有某种类型的残疾,因此使您的Roblox游戏可达可以帮助您触及更广泛的受众。
字体大小
玩家可能会发现阅读小字体困难。比较以下游戏内商店菜单与应用模糊效果,这模拟了视觉受损人群可能看到的效果。

如果您增加较小字体标签的大小,大多数玩家会更容易阅读。

颜色对比
玩家可能会发现白色文本在浅色背景上或黑色文本在深色背景上难以阅读。为了改善可达性,建议选择具有足够颜色对比的文本和背景颜色。


颜色非依赖
全球超过5%的人口有某种形式的色盲。虽然仅以黑白形式查看的情况少见,但想象一下在灰度色彩中观看游戏的情形:

通过修改图像以使用不同的符号与颜色一起使用,更多玩家可以在游戏和其他上下文中分辨出差异:

声音非依赖
声音是增强沉浸感的绝佳补充,但听力受损的玩家或任何将音量关闭的人会对仅通过声音传达的游戏事件感到困惑。
考虑以下场景,其中响铃电话仅通过声音传达,然后通过声音和视觉辅助同时传达。
玩家偏好
在Roblox和游戏内的设置菜单中,玩家可以找到多种视觉设置,包括首选透明度、首选文本大小和减少运动。为了获得最佳可达性,您的用户界面应适应这些设置。
首选透明度
背景透明度设置映射到GuiService.PreferredTransparency属性。值为1表示玩家偏好默认背景透明度,而值为0表示玩家偏好完全不透明的背景透明度,以提高可读性和对比度。
将UI元素的BackgroundTransparency与PreferredTransparency相乘是使用此设置的推荐方法;当PreferredTransparency接近0时,背景将变得更加不透明。
使用标记系统,将TransparentBack标签应用于所有具有BackgroundTransparency的UI项,如TextLabels或Frames。

四个TextLabel元素具有不同的BackgroundTransparency级别 将以下代码粘贴到LocalScript中,位于StarterPlayerScripts内。
首选透明度的动态调整local GuiService = game:GetService("GuiService")local CollectionService = game:GetService("CollectionService")local TAG = "TransparentBack"local transparentBackObjects = {}local function onInstanceAdded(object)if object.BackgroundTransparency thenlocal defaultTransparency = object.BackgroundTransparencytransparentBackObjects[object] = defaultTransparencyobject.BackgroundTransparency = defaultTransparency * GuiService.PreferredTransparencyendendlocal function onInstanceRemoved(object)transparentBackObjects[object] = nilend-- 存储初始标记实例for _, object in CollectionService:GetTagged(TAG) doonInstanceAdded(object)end-- 监听标记实例被添加或移除CollectionService:GetInstanceAddedSignal(TAG):Connect(onInstanceAdded)CollectionService:GetInstanceRemovedSignal(TAG):Connect(onInstanceRemoved)-- 当游戏内设置更改时,调整标记实例GuiService:GetPropertyChangedSignal("PreferredTransparency"):Connect(function()for object, defaultTransparency in transparentBackObjects doobject.BackgroundTransparency = defaultTransparency * GuiService.PreferredTransparencyendend)
首选文本大小
文本大小设置映射到GuiService.PreferredTextSize属性,默认为Medium。玩家可以选择通过引擎的字体渲染管道将文本大小增加到Large、Larger或Largest。
在处理UI元素时,请注意以下行为:
通过UITextSizeConstraint强制限制到最小和/或最大大小的文本将不会小于设定的MinTextSize/MaxTextSize进行缩小或扩展,无论玩家的文本大小设置如何。
当TextScaled为TextLabel或TextButton启用时,该元素的文本将不按PreferredTextSize值进行缩放。
启用AutomaticSize的UI元素将在PreferredTextSize减小/增加时变小/变大(元素边界将调整以适应调整大小的文本)。
当在TextWrapped为TextLabel或TextButton启用时,元素的文本将在PreferredTextSize增加时,依据元素的绝对大小换行至附加行。
减少运动
减少运动切换映射到GuiService.ReducedMotionEnabled属性。值为true表示玩家希望通过UI 动画/缓动减少或完全移除运动效果。
移除UI缓动中的运动的基本方法是当ReducedMotionEnabled为true时,将Time参数设置为0,有效地使UI对象瞬间达到目标。
减少运动时UI缓动瞬间到达目标local GuiService = game:GetService("GuiService")local Players = game:GetService("Players")local TweenService = game:GetService("TweenService")local player = Players.LocalPlayerlocal playerGui = player.PlayerGuilocal menuUI = playerGui:WaitForChild("MenuUI")-- 使用0.75秒的缓动时间,除非启用了减少运动local TWEEN_TIME = if GuiService.ReducedMotionEnabled then 0 else 0.75local tweenInfo = TweenInfo.new(TWEEN_TIME, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out)local tween = TweenService:Create(menuUI.SettingsFrame, tweenInfo, {Position = UDim2.fromScale(0.5, 0.5)})tween:Play()
除了瞬间到达,您还可以使用更明确的true/false逻辑处理ReducedMotionEnabled。例如,以下LocalScript默认使用运动缓动,但对于启用减少运动的玩家切换到淡入,从而实现更优雅的过渡而无需位置移动。
减少运动时使用淡入缓动local GuiService = game:GetService("GuiService")local Players = game:GetService("Players")local TweenService = game:GetService("TweenService")local player = Players.LocalPlayerlocal playerGui = player.PlayerGuilocal menuUI = playerGui:WaitForChild("MenuUI")-- 创建画布组以统一缓动所有子元素local canvasGroup = Instance.new("CanvasGroup")canvasGroup.Size = UDim2.fromScale(1, 1)canvasGroup.BackgroundTransparency = 1canvasGroup.Parent = menuUI-- 将子元素添加到画布组menuUI.SettingsFrame.Parent = canvasGrouplocal tweenInfo = TweenInfo.new(0.75, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out)local tween-- 使用淡入缓动以减少运动,或使用运动缓动if GuiService.ReducedMotionEnabled then-- 最初将画布组设置为完全透明(不可见)canvasGroup.GroupTransparency = 1-- 淡入画布组tween = TweenService:Create(canvasGroup, tweenInfo, {GroupTransparency = 0})else-- 最初将画布组设置在屏幕外canvasGroup.Position = UDim2.fromScale(0, -1)-- 将画布组移动到屏幕上tween = TweenService:Create(canvasGroup, tweenInfo, {Position = UDim2.fromScale(0, 0)})endtween:Play()
音量控制
同时播放的不同声音可能会让人感到不知所措,分散注意力或难以分辨。为用户提供不同“音频组”的音量控制,例如音效、音乐和语音,让他们能够自定义游戏并关注他们需要的内容。
考虑以下非常吵闹的游戏示例,用户能够分别调整音乐和音效的音量。
