Truy cập là thực hành thiết kế sản phẩm và dịch vụ để có thể sử dụng cho người khuyết tật. Các thống kê gần đây chỉ ra rằng hơn 26% người dân có một loại khuyết tật nào đó, vì vậy việc làm cho trò chơi Roblox của bạn có thể truy cập được sẽ giúp bạn tiếp cận được nhiều đối tượng hơn.
Kích thước văn bản
Người chơi có thể gặp khó khăn trong việc đọc các văn bản nhỏ. So sánh menu cửa hàng trong game dưới đây với hiệu ứng mờ, mô phỏng những gì nó có thể trông như thế nào đối với những người có thị lực kém.

Nếu bạn tăng kích thước của các nhãn văn bản nhỏ hơn, nó sẽ rõ ràng hơn đối với hầu hết người chơi.

Độ tương phản màu sắc
Người chơi có thể gặp khó khăn trong việc đọc văn bản sáng trên nền sáng, hoặc văn bản tối trên nền tối. Để cải thiện khả năng truy cập, bạn nên chọn màu văn bản và màu nền có độ tương phản màu sắc đủ cao.


Không phụ thuộc vào màu sắc
Hơn 5% dân số thế giới có một dạng mù màu nào đó. Mặc dù hiếm khi có người chỉ nhìn thấy đen và trắng, hãy tưởng tượng việc xem một trò chơi chỉ với gam màu xám:

Bằng cách chỉnh sửa hình ảnh để sử dụng các biểu tượng khác nhau bên cạnh các màu sắc, nhiều người chơi hơn có thể phân biệt được sự khác nhau trong gameplay và các ngữ cảnh khác:

Không phụ thuộc vào âm thanh
Âm thanh là một bổ sung tuyệt vời cho các trò chơi hấp dẫn, nhưng người chơi khiếm thính hoặc bất kỳ ai tắt âm thanh sẽ bị nhầm lẫn bởi các sự kiện trong game chỉ được truyền đạt bằng âm thanh.
Hãy xem cảnh sau đây, trong đó một chiếc điện thoại đang reo chỉ được báo hiệu bằng âm thanh, và sau đó được báo hiệu bằng cả âm thanh và các trợ giúp hình ảnh.
Sở thích của người chơi
Các cài đặt hình ảnh khác nhau có sẵn cho người chơi từ Roblox và trong menu Cài đặt trong game, bao gồm độ trong suốt ưa thích, kích thước văn bản ưa thích, và giảm chuyển động. Để đạt được khả năng truy cập tối ưu, giao diện người dùng của bạn nên phù hợp với từng cài đặt này.
Độ trong suốt ưa thích
Cài đặt Độ Trong Suốt Nền tương ứng với thuộc tính GuiService.PreferredTransparency. Giá trị 1 cho biết người chơi ưa thích độ trong suốt nền mặc định, trong khi giá trị 0 cho biết người chơi ưa thích nền hoàn toàn không trong suốt để cải thiện khả năng đọc và độ tương phản.
Nhân giá trị BackgroundTransparency của một yếu tố UI với giá trị PreferredTransparency là cách khuyến nghị để sử dụng cài đặt này; nền sẽ trở nên ít trong suốt hơn khi PreferredTransparency tiến gần tới 0.
Sử dụng hệ thống gán thẻ, áp dụng thẻ TransparentBack cho tất cả các mục UI có BackgroundTransparency như TextLabels hoặc Frames.

Bốn yếu tố TextLabel với các mức độ BackgroundTransparency khác nhau Dán đoạn mã sau vào một LocalScript trong StarterPlayerScripts.
Điều Chỉnh Năng Động cho Độ Trong Suốt Ưa Thíchlocal 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-- Lưu trữ các đối tượng đã gán thẻ ban đầufor _, object in CollectionService:GetTagged(TAG) doonInstanceAdded(object)end-- Phát hiện khi đối tượng gán thẻ được thêm hoặc xóaCollectionService:GetInstanceAddedSignal(TAG):Connect(onInstanceAdded)CollectionService:GetInstanceRemovedSignal(TAG):Connect(onInstanceRemoved)-- Khi cài đặt trong game thay đổi, điều chỉnh các đối tượng đã gán thẻGuiService:GetPropertyChangedSignal("PreferredTransparency"):Connect(function()for object, defaultTransparency in transparentBackObjects doobject.BackgroundTransparency = defaultTransparency * GuiService.PreferredTransparencyendend)Chơi thử trò chơi, mở menu Cài đặt, và điều chỉnh Độ Trong Suốt Nền. Các yếu tố UI được gán thẻ nên cập nhật giữa độ trong suốt nền mặc định BackgroundTransparency và độ trong suốt hoàn toàn.

Kích thước văn bản ưa thích
Cài đặt Kích Thước Văn Bản tương ứng với thuộc tính GuiService.PreferredTextSize có mặc định là Medium. Người chơi có thể chọn tăng kích thước văn bản thông qua quy trình kết xuất phông chữ của engine lên Large, Larger, hoặc Largest.
Khi làm việc với các yếu tố UI, hãy lưu ý các hành vi sau:
Văn bản bị giới hạn ở kích thước tối thiểu và/hoặc tối đa thông qua UITextSizeConstraint sẽ không thu nhỏ dưới hoặc mở rộng trên mức MinTextSize/MaxTextSize, bất kể cài đặt kích thước văn bản của người chơi là gì.
Khi TextScaled được kích hoạt cho một TextLabel hoặc TextButton, văn bản của yếu tố sẽ không được tỷ lệ hóa bởi giá trị PreferredTextSize.
Các yếu tố UI với AutomaticSize được kích hoạt sẽ thu nhỏ/tăng trưởng khi giá trị PreferredTextSize giảm/tăng (kích thước yếu tố sẽ thay đổi để phù hợp với văn bản được thay đổi kích thước).
Khi TextWrapped được kích hoạt cho một TextLabel hoặc TextButton, văn bản của yếu tố sẽ được bọc thành các dòng bổ sung khi giá trị PreferredTextSize tăng lên, trong các giới hạn của kích thước tuyệt đối của yếu tố.
Các kết quả trả về bởi TextService:GetTextSize() và TextService:GetTextBoundsAsync() tôn trọng những thay đổi liên quan đến PreferredTextSize.
Giảm chuyển động
Cài đặt Giảm Chuyển Động tương ứng với thuộc tính GuiService.ReducedMotionEnabled. Giá trị true cho biết người chơi muốn những hiệu ứng chuyển động qua hoạt ảnh/tween UI được giảm hoặc hoàn toàn loại bỏ.
Một cách tiếp cận cơ bản để loại bỏ chuyển động từ các tween UI là đặt tham số Time của một TweenInfo là 0 khi ReducedMotionEnabled là true, tạo ra hiệu ứng ngay lập tức khi chuyển UI đến mục tiêu.
UI Tween Snap-to-Target cho Giảm Chuyển Độnglocal 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")-- Sử dụng thời gian tween là 0.75 giây trừ khi chế độ giảm chuyển động được kích hoạtlocal 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()
Thay vì nhảy ngay lập tức, bạn có thể xử lý ReducedMotionEnabled với logic true/false rõ ràng hơn. Ví dụ, LocalScript sau sử dụng tween chuyển động theo mặc định, nhưng chuyển sang fade-in cho người chơi kích hoạt chế độ giảm chuyển động, tạo ra một chuyển tiếp tinh tế hơn mà không cần di chuyển vị trí.
Quay Lại Fade Tween cho Giảm Chuyển Độnglocal 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")-- Tạo một nhóm canvas để tween tất cả các trẻ một cách đồng đềulocal canvasGroup = Instance.new("CanvasGroup")canvasGroup.Size = UDim2.fromScale(1, 1)canvasGroup.BackgroundTransparency = 1canvasGroup.Parent = menuUI-- Thêm trẻ vào nhóm canvasmenuUI.SettingsFrame.Parent = canvasGrouplocal tweenInfo = TweenInfo.new(0.75, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out)local tween-- Sử dụng tween fade cho chế độ giảm chuyển động, hoặc tween chuyển động nếu khôngif GuiService.ReducedMotionEnabled then-- Đặt nhóm canvas ban đầu là hoàn toàn trong suốt (vô hình)canvasGroup.GroupTransparency = 1-- Fade nhóm canvastween = TweenService:Create(canvasGroup, tweenInfo, {GroupTransparency = 0})else-- Đặt nhóm canvas ban đầu ra khỏi màn hìnhcanvasGroup.Position = UDim2.fromScale(0, -1)-- Di chuyển nhóm canvas vào màn hìnhtween = TweenService:Create(canvasGroup, tweenInfo, {Position = UDim2.fromScale(0, 0)})endtween:Play()
Điều khiển âm lượng
Âm thanh khác nhau cùng phát tại một thời điểm có thể gây choáng ngợp, phân tâm, hoặc khó phân biệt. Cung cấp cho người dùng các điều khiển âm lượng cho các "nhóm" âm thanh khác nhau như hiệu ứng âm thanh, âm nhạc, và giọng nói cho phép họ tùy chỉnh trò chơi của mình và tập trung vào những gì họ cần.
Hãy xem ví dụ sau đây về một trò chơi rất ồn ào nơi người dùng có thể điều chỉnh âm lượng nhạc và hiệu ứng âm thanh riêng biệt.