Dostępność to praktyka projektowania produktów i usług, aby były one używane przez osoby z niepełnosprawnościami. Ostatnie statystyki wskazują, że ponad 26% ludzi ma jakąś formę niepełnosprawności, więc uczynienie Twojej gry na Roblox dostępną może pomóc Ci dotrzeć do szerszej publiczności.
Rozmiar tekstu
Gracze mogą mieć trudności z odczytaniem małego tekstu. Porównaj poniższe menu sklepu w grze z nałożonym rozmyciem, symulując, jak może wyglądać to dla kogoś z upośledzeniem wzroku.

Jeśli zwiększysz rozmiar mniejszych etykiet, stanie się to bardziej czytelne dla większości graczy.

Kontrast kolorów
Gracze mogą mieć trudności z odczytaniem jasnego tekstu na jasnym tle lub ciemnego tekstu na ciemnym tle. Aby poprawić dostępność, zaleca się wybieranie kolorów tekstu i tła z odpowiednim kontrastem kolorów.


Niezależność od kolorów
Ponad 5% ludzi na świecie ma jakiś rodzaj daltonizmu. Chociaż rzadko zdarza się, aby ktoś widział tylko w czerni i bieli, wyobraź sobie grę w odcieniach szarości:

Modyfikując obraz, aby używać różnych symboli obok kolorów, więcej graczy może rozróżniać sytuacje w grze i w innych kontekstach:

Niezależność od dźwięku
Dźwięk jest doskonałym dodatkiem do immersyjnych gier, ale gracze z upośledzeniem słuchu lub ci, którzy wyłączają dźwięk, będą zdezorientowani przez wydarzenia w grze, które są tylko przekazywane dźwiękiem.
Rozważ poniższą scenę, w której dzwoniący telefon sygnalizowany jest tylko dźwiękiem, a następnie sygnalizowany zarówno dźwiękiem jak i wizualnymi wskazówkami.
Preferencje gracza
Różne ustawienia wizualne są dostępne dla graczy z menu Ustawienia w Robloxie oraz w grze, w tym preferowana przezroczystość, preferowany rozmiar tekstu i zmniejszone ruchy. Aby zapewnić optymalną dostępność, Twój interfejs użytkownika powinien to uwzględniać.
Preferowana przezroczystość
Ustawienie Przezroczystość tła odpowiada właściwości GuiService.PreferredTransparency. Wartość 1 wskazuje, że gracz preferuje domyślną przezroczystość tła, natomiast wartość 0 oznacza, że gracz preferuje całkowicie nieprzezroczyste (nieprzezroczyste) tło dla poprawy czytelności i kontrastu.
Mnożenie BackgroundTransparency elementu UI przez PreferredTransparency jest zalecaną metodą użycia tego ustawienia; tła będą stawały się bardziej nieprzezroczyste, gdy PreferredTransparency zbliża się do 0.
Używając systemu tagowania, zastosuj tag TransparentBack do wszystkich elementów UI z BackgroundTransparency, takich jak TextLabels lub Frames.

Cztery elementy TextLabel z różnymi poziomami BackgroundTransparency Wklej poniższy kod do LocalScript w StarterPlayerScripts.
Dynamic Adjustment for Preferred Transparencylocal 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-- Store initial tagged instancesfor _, object in CollectionService:GetTagged(TAG) doonInstanceAdded(object)end-- Detect when tagged instance is added or removedCollectionService:GetInstanceAddedSignal(TAG):Connect(onInstanceAdded)CollectionService:GetInstanceRemovedSignal(TAG):Connect(onInstanceRemoved)-- When in-game setting is changed, adjust tagged instancesGuiService:GetPropertyChangedSignal("PreferredTransparency"):Connect(function()for object, defaultTransparency in transparentBackObjects doobject.BackgroundTransparency = defaultTransparency * GuiService.PreferredTransparencyendend)Przetestuj grę, otwórz menu Ustawienia i dostosuj Przezroczystość tła. Oznaczone elementy UI powinny aktualizować się między swoją domyślną BackgroundTransparency a całkowicie nieprzezroczystym.

Preferowany rozmiar tekstu
Ustawienie Rozmiar tekstu odpowiada właściwości GuiService.PreferredTextSize, która domyślnie jest ustawiona na Medium. Gracze mogą zwiększyć rozmiar tekstu za pomocą silnika renderującego czcionki do Large, Larger lub Largest.
Podczas pracy z elementami UI należy zwrócić uwagę na następujące zachowania:
Tekst, który jest ograniczony do minimalnego i/lub maksymalnego rozmiaru za pomocą UITextSizeConstraint, nie zmniejszy się poniżej ani nie powiększy ponad ustawioną wartość MinTextSize/MaxTextSize, niezależnie od ustawienia rozmiaru tekstu gracza.
Gdy TextScaled jest włączone dla TextLabel lub TextButton, tekst elementu nie będzie skalowany według wartości PreferredTextSize.
Elementy UI z włączoną AutomaticSize będą się kurczyć/rozszerzać w miarę zmniejszania/zwiekszania PreferredTextSize (granice elementu będą dostosowywać się do zmienionego tekstu).
Gdy TextWrapped jest włączone dla TextLabel lub TextButton, tekst elementu będzie zawijany na dodatkowe linie w miarę zwiększania PreferredTextSize, w granicach bezwzględnego rozmiaru elementu.
Wyniki zwracane przez TextService:GetTextSize() i TextService:GetTextBoundsAsync() respektują zmiany związane z PreferredTextSize.
Zmniejszone ruchy
Przełącznik Zmniejszenie ruchu odpowiada właściwości GuiService.ReducedMotionEnabled. Wartość true oznacza, że gracz chce, aby efekty ruchu przez animacje/tweens UI były zmniejszone lub całkowicie usunięte.
Podstawowym podejściem do usunięcia ruchu z tweens UI jest ustawienie parametru Time obiektu TweenInfo na 0, gdy ReducedMotionEnabled jest true, co efektywnie sprawia, że obiekt UI natychmiast przeskakuje do celu.
Zatrzymanie UI Tween do celu dla zmniejszonego ruchulocal 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")-- Użyj czasu tweena 0.75 sekundy, chyba że zmniejszone ruchy są włączonelocal 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()
Alternatywnie, aby uzyskać natychmiastowe przeskakiwanie, można obsłużyć ReducedMotionEnabled z bardziej wyraźną logiką true/false. Na przykład, poniższy LocalScript domyślnie stosuje tweening ruchu, ale przełącza się na fade-in dla graczy, którzy włączą zmniejszone ruchy, co skutkuje bardziej eleganckim przejściem bez ruchu pozycyjnego.
Zamiana na Fade Tween dla zmniejszonego ruchulocal 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")-- Utwórz grupę kanwy, aby tweenować wszystkie dzieci jednolicielocal canvasGroup = Instance.new("CanvasGroup")canvasGroup.Size = UDim2.fromScale(1, 1)canvasGroup.BackgroundTransparency = 1canvasGroup.Parent = menuUI-- Dodaj dzieci do grupy kanwymenuUI.SettingsFrame.Parent = canvasGrouplocal tweenInfo = TweenInfo.new(0.75, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out)local tween-- Użyj fade tween dla zmniejszonego ruchu, lub tween ruchu w przeciwnym razieif GuiService.ReducedMotionEnabled then-- Początkowo ustaw grupę kanwy na całkowicie przezroczystą (niewidoczną)canvasGroup.GroupTransparency = 1-- Fade-in dla grupy kanwytween = TweenService:Create(canvasGroup, tweenInfo, {GroupTransparency = 0})else-- Początkowo ustaw grupę kanwy poza ekranemcanvasGroup.Position = UDim2.fromScale(0, -1)-- Ruch grupy kanwy na ekrantween = TweenService:Create(canvasGroup, tweenInfo, {Position = UDim2.fromScale(0, 0)})endtween:Play()
Kontrola głośności
Różne dźwięki odtwarzające się jednocześnie mogą być przytłaczające, rozpraszające lub trudne do odróżnienia. Zapewnienie użytkownikom kontroli głośności dla różnych "grup" dźwięku, takich jak efekty dźwiękowe, muzyka i mowa, pozwala im dostosować swoją grę i skupić się na tym, czego potrzebują.
Rozważ poniższy przykład bardzo hałaśliwej gry, w której użytkownik może oddzielnie modyfikować głośność muzyki i efektów dźwiękowych.