Acessibilidade é a prática de projetar produtos e serviços para serem utilizáveis por pessoas com deficiências. Estatísticas recentes indicam que mais de 26% das pessoas têm algum tipo de deficiência, então tornar seu jogo Roblox acessível pode ajudá-lo a atingir um público mais amplo.
Tamanho do texto
Os jogadores podem achar difícil ler textos pequenos. Compare o seguinte menu da loja do jogo com um desfoque aplicado, simulando como pode parecer para alguém com visão prejudicada.

Se você aumentar o tamanho dos rótulos de fonte menores, ficará mais claro para a maioria dos jogadores.

Contraste de cores
Os jogadores podem ter dificuldade em ler texto claro em um fundo claro ou texto escuro em um fundo escuro. Para melhorar a acessibilidade, é recomendado escolher cores de texto e fundo com contraste suficiente.


Não dependência de cores
Mais de 5% das pessoas no mundo têm algum tipo de daltonismo. Embora seja raro alguém ver apenas em preto e branco, imagine visualizar um jogo em escala de cinza:

Modificando a imagem para usar diferentes símbolos ao lado das cores, mais jogadores podem notar a diferença no jogo e em outros contextos:

Não dependência de som
O som é uma excelente adição para jogos imersivos, mas jogadores com deficiência auditiva ou qualquer um que desliga seu volume pode ficar confuso com eventos do jogo que são apenas transmitidos com som.
Considere a seguinte cena onde um telefone tocando é sinalizado apenas pelo som e depois sinalizado com som e ajudas visuais.
Preferências do jogador
Várias configurações visuais estão disponíveis para os jogadores nos menus Configurações do Roblox e do jogo, incluindo transparência preferida, tamanho de texto preferido e movimento reduzido. Para otimizar a acessibilidade, sua interface do usuário deve acomodar cada uma.
Transparência preferida
A configuração de Transparência de Fundo mapeia para a propriedade GuiService.PreferredTransparency. Um valor de 1 indica que o jogador prefere a transparência de fundo padrão, enquanto um valor de 0 indica que o jogador prefere transparência de fundo totalmente opaca (não transparente) para melhorar a legibilidade e o contraste.
Multiplicar a BackgroundTransparency de um elemento da IU com PreferredTransparency é a maneira recomendada de usar essa configuração; os fundos se tornarão mais opacos à medida que PreferredTransparency se aproxima de 0.
Usando o sistema de tagging, aplique uma tag de TransparentBack a todos os itens de IU com BackgroundTransparency, como TextLabels ou Frames.

Quatro elementos TextLabel com níveis variados de BackgroundTransparency Cole o seguinte código em um LocalScript dentro de StarterPlayerScripts.
Ajuste Dinâmico para Transparência 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-- Armazena instâncias tags iniciaisfor _, object in CollectionService:GetTagged(TAG) doonInstanceAdded(object)end-- Detecta quando uma instância tag é adicionada ou removidaCollectionService:GetInstanceAddedSignal(TAG):Connect(onInstanceAdded)CollectionService:GetInstanceRemovedSignal(TAG):Connect(onInstanceRemoved)-- Quando a configuração do jogo é alterada, ajusta instâncias tagGuiService:GetPropertyChangedSignal("PreferredTransparency"):Connect(function()for object, defaultTransparency in transparentBackObjects doobject.BackgroundTransparency = defaultTransparency * GuiService.PreferredTransparencyendend)Faça um teste no jogo, abra o menu Configurações e ajuste a Transparência de Fundo. Os elementos de IU marcados devem atualizar entre sua BackgroundTransparency padrão e totalmente opaca.

Tamanho de texto preferido
A configuração de Tamanho do Texto mapeia para a propriedade GuiService.PreferredTextSize, que é definida como Medium. Os jogadores podem optar por aumentar o tamanho do texto através do pipeline de renderização de fontes do motor para Large, Larger, ou Largest.
Ao trabalhar com elementos de IU, observe os seguintes comportamentos:
O texto que é restringido a um tamanho mínimo e/ou máximo através de um UITextSizeConstraint não irá encolher abaixo ou expandir acima do MinTextSize/MaxTextSize definido, independentemente da configuração de tamanho de texto do jogador.
Quando TextScaled é habilitado para um TextLabel ou TextButton, o texto do elemento não será escalado pelo valor de PreferredTextSize.
Elementos de IU com AutomaticSize habilitado irão encolher/crescer conforme PreferredTextSize diminuir/aumentar (os limites do elemento irão redimensionar para se adequar ao texto redimensionado).
Quando TextWrapped é habilitado para um TextLabel ou TextButton, o texto do elemento irá quebrar em linhas adicionais à medida que PreferredTextSize aumenta, dentro dos limites do tamanho absoluto do elemento.
Os resultados retornados por TextService:GetTextSize() e TextService:GetTextBoundsAsync() honram mudanças relativas a PreferredTextSize.
Movimento reduzido
A alternância de Reduzir Movimento mapeia para a propriedade GuiService.ReducedMotionEnabled. Um valor de true indica que o jogador deseja que os efeitos de movimento através de animações/tweens da IU sejam reduzidos ou completamente removidos.
Uma abordagem básica para remover movimento de tweens da IU é definir o parâmetro Time de um TweenInfo para 0 quando ReducedMotionEnabled é true, efetivamente fazendo com que o objeto da IU apareça instantaneamente em seu alvo.
Snap-to-Target de Tween de IU para Movimento Reduzidolocal 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 tempo de tween de 0.75 segundos a menos que o movimento reduzido esteja 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 ao instantâneo, você pode lidar com ReducedMotionEnabled com uma lógica mais distinta de true/false. Por exemplo, o seguinte LocalScript usa o tweening de movimento por padrão, mas muda para fade-in para jogadores que habilitam movimento reduzido, resultando em uma transição mais elegante sem movimento de posição.
Fallback para Tween de Fade para Movimento Reduzidolocal 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")-- Criar um grupo de canvas para tweenar todos os filhos uniformementelocal canvasGroup = Instance.new("CanvasGroup")canvasGroup.Size = UDim2.fromScale(1, 1)canvasGroup.BackgroundTransparency = 1canvasGroup.Parent = menuUI-- Adicionar filhos ao grupo de canvasmenuUI.SettingsFrame.Parent = canvasGrouplocal tweenInfo = TweenInfo.new(0.75, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out)local tween-- Usar tween de fading para movimento reduzido, ou um tween de movimento caso contrárioif GuiService.ReducedMotionEnabled then-- Inicialmente definir o grupo de canvas como totalmente transparente (invisível)canvasGroup.GroupTransparency = 1-- Fade no grupo de canvastween = TweenService:Create(canvasGroup, tweenInfo, {GroupTransparency = 0})else-- Inicialmente definir o grupo de canvas fora da telacanvasGroup.Position = UDim2.fromScale(0, -1)-- Mover o grupo de canvas na telatween = TweenService:Create(canvasGroup, tweenInfo, {Position = UDim2.fromScale(0, 0)})endtween:Play()
Controles de volume
Sonhos diferentes tocando ao mesmo tempo podem ser desafiadores, distrativos ou difíceis de distinguir. Fornecer aos usuários controles de volume para diferentes "grupos" de áudio, como efeitos sonoros, música e fala, permite que eles personalizem seu jogo e se concentrem no que precisam.
Considere o seguinte exemplo de um jogo muito barulhento onde o usuário pode modificar os volumes da música e dos efeitos sonoros separadamente.