Accesibilidad es la práctica de diseñar productos y servicios para que sean utilizables por personas con discapacidad. Estadísticas recientes indican que más del 26% de las personas tienen algún tipo de discapacidad, por lo que hacer que tu juego de Roblox sea accesible puede ayudarte a alcanzar una audiencia más amplia.
Tamaño del texto
Los jugadores pueden encontrar difícil leer texto pequeño. Compara el siguiente menú de tienda en el juego con un desenfoque aplicado, simulando cómo podría parecerle a alguien con visión reducida.

Si aumentas el tamaño de las etiquetas de fuente más pequeñas, será más claro para la mayoría de los jugadores.

Contraste de color
Los jugadores pueden encontrar difícil leer texto claro sobre un fondo claro, o texto oscuro sobre un fondo oscuro. Para mejorar la accesibilidad, se recomienda que elijas colores de texto y fondo con un contraste de color suficiente.


No dependencia del color
Más del 5% de las personas en el mundo tienen alguna forma de daltonismo. Aunque es raro que alguien vea solo en blanco y negro, imagina ver un juego en escala de grises:

Al modificar la imagen para usar diferentes símbolos junto a los colores, más jugadores pueden distinguir la diferencia en la jugabilidad y en otros contextos:

No dependencia del sonido
El sonido es una excelente adición para juegos inmersivos, pero los jugadores con discapacidad auditiva o cualquiera que apague su volumen se sentirán confundidos por eventos dentro del juego que se transmiten solo mediante sonido.
Considera la siguiente escena donde un teléfono que suena se señala solo con sonido, y luego se señala con sonido y ayudas visuales.
Preferencias del jugador
Varios ajustes visuales están disponibles para los jugadores desde los menús de Configuración de Roblox y del juego, incluyendo transparencia preferida, tamaño de texto preferido y movimiento reducido. Para una accesibilidad óptima, tu interfaz de usuario debe acomodar cada una de ellas.
Transparencia preferida
La configuración de Transparencia de Fondo corresponde a la propiedad GuiService.PreferredTransparency. Un valor de 1 indica que el jugador prefiere la transparencia de fondo predeterminada, mientras que un valor de 0 indica que el jugador prefiere una transparencia de fondo completamente opaca (no transparente) para mejorar la legibilidad y el contraste.
Multiplicar la BackgroundTransparency de un elemento de UI por PreferredTransparency es la forma recomendada de usar esta configuración; los fondos se volverán más opacos a medida que PreferredTransparency se acerque a 0.
Usando el sistema de etiquetado, aplica una etiqueta de TransparentBack a todos los elementos de UI con BackgroundTransparency como TextLabels o Frames.

Cuatro elementos TextLabel con diferentes niveles de BackgroundTransparency Pega el siguiente código en un LocalScript dentro de StarterPlayerScripts.
Ajuste Dinámico para la Transparencia Preferidalocal 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-- Almacenar las instancias etiquetadas inicialesfor _, object in CollectionService:GetTagged(TAG) doonInstanceAdded(object)end-- Detectar cuando se añade o se quita una instancia etiquetadaCollectionService:GetInstanceAddedSignal(TAG):Connect(onInstanceAdded)CollectionService:GetInstanceRemovedSignal(TAG):Connect(onInstanceRemoved)-- Cuando se cambie la configuración en el juego, ajustar las instancias etiquetadasGuiService:GetPropertyChangedSignal("PreferredTransparency"):Connect(function()for object, defaultTransparency in transparentBackObjects doobject.BackgroundTransparency = defaultTransparency * GuiService.PreferredTransparencyendend)Prueba el juego, abre el menú de Configuración y ajusta la Transparencia de Fondo. Los elementos de UI etiquetados deben actualizarse entre su BackgroundTransparency predeterminado y completamente opaco.

Tamaño de texto preferido
La configuración de Tamaño de Texto corresponde a la propiedad GuiService.PreferredTextSize que tiene como valor predeterminado Medium. Los jugadores pueden optar por aumentar el tamaño del texto a través del pipeline de renderizado de fuentes del motor a Large, Larger, o Largest.
Al trabajar con elementos de UI, ten en cuenta los siguientes comportamientos:
El texto que está restringido a un tamaño mínimo y/o máximo a través de un UITextSizeConstraint no se encogerá por debajo o se expandirá por encima del MinTextSize/MaxTextSize establecido, independientemente de la configuración de tamaño de texto del jugador.
Cuando TextScaled está habilitado para un TextLabel o TextButton, el texto del elemento no se escalará según el valor de PreferredTextSize.
Los elementos de UI con AutomaticSize habilitado se encogerán/crecerán a medida que PreferredTextSize disminuya/aumente (los límites del elemento se redimensionarán para ajustarse al texto redimensionado).
Cuando TextWrapped está habilitado para un TextLabel o TextButton, el texto del elemento se ajustará a líneas adicionales a medida que PreferredTextSize aumente, dentro de los límites del tamaño absoluto del elemento.
Los resultados devueltos por TextService:GetTextSize() y TextService:GetTextBoundsAsync() respetan los cambios relacionados con PreferredTextSize.
Movimiento reducido
El toggle de Reducir Movimiento corresponde a la propiedad GuiService.ReducedMotionEnabled. Un valor de true indica que el jugador desea que los efectos de movimiento a través de animaciones/tweens de UI sean reducidos o eliminados por completo.
Un enfoque básico para eliminar movimiento de los tweens de la UI es establecer el parámetro Time de un TweenInfo en 0 cuando ReducedMotionEnabled es true, haciendo que el objeto de UI salte instantáneamente a su objetivo.
Ajuste Instantáneo de UI para Movimiento Reducidolocal 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")-- Usar un tiempo de tween de 0.75 segundos a menos que el movimiento reducido esté habilitadolocal 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()
Alternativamente al salto instantáneo, puedes manejar ReducedMotionEnabled con una lógica más distinta de true/false. Por ejemplo, el siguiente LocalScript utiliza tweening de movimiento por defecto, pero cambia a un desvanecimiento para jugadores que habilitan movimiento reducido, resultando en una transición más elegante sin movimiento posicional.
Devolución a Tween de Desvanecimiento para Movimiento Reducidolocal 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")-- Crear un grupo de lienzo para tweenear todos los hijos uniformementelocal canvasGroup = Instance.new("CanvasGroup")canvasGroup.Size = UDim2.fromScale(1, 1)canvasGroup.BackgroundTransparency = 1canvasGroup.Parent = menuUI-- Agregar hijos al grupo de lienzomenuUI.SettingsFrame.Parent = canvasGrouplocal tweenInfo = TweenInfo.new(0.75, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out)local tween-- Usar tween de desvanecimiento para movimiento reducido, o un tween de movimiento de lo contrarioif GuiService.ReducedMotionEnabled then-- Inicialmente establecer el grupo de lienzo como completamente transparente (invisible)canvasGroup.GroupTransparency = 1-- Desvanecer el grupo de lienzotween = TweenService:Create(canvasGroup, tweenInfo, {GroupTransparency = 0})else-- Inicialmente establecer el grupo de lienzo fuera de la pantallacanvasGroup.Position = UDim2.fromScale(0, -1)-- Mover el grupo de lienzo a la pantallatween = TweenService:Create(canvasGroup, tweenInfo, {Position = UDim2.fromScale(0, 0)})endtween:Play()
Controles de volumen
Diferentes sonidos que se reproducen al mismo tiempo pueden ser abrumadores, distraer o ser difíciles de distinguir. Proporcionar a los usuarios controles de volumen para diferentes "grupos" de audio como efectos de sonido, música y voz les permite personalizar su juego y concentrarse en lo que necesitan.
Considera el siguiente ejemplo de un juego muy ruidoso donde el usuario puede modificar los volúmenes de música y efectos de sonido por separado.