การเข้าถึง คือแนวทางการออกแบบผลิตภัณฑ์และบริการให้สามารถใช้งานได้โดยผู้ที่มีความพิการ สถิติเมื่อไม่นานมานี้เผยว่า มีผู้คนกว่า 26% ที่มีความพิการบางประเภท ดังนั้นการทำให้เกม Roblox ของคุณเข้าถึงได้สามารถช่วยให้คุณเข้าถึงผู้ชมที่กว้างขึ้น
ขนาดข้อความ
ผู้เล่นอาจพบปัญหาในการอ่านข้อความที่มีขนาดเล็ก เปรียบเทียบเมนูร้านค้าในเกมด้านล่างนี้ด้วยการเบลอเพื่อจำลองภาพที่อาจดูเหมือนกับใครบางคนที่มีวิสัยทัศน์บกพร่อง

ถ้าคุณเพิ่มขนาดของข้อความขนาดเล็ก ผลลัพธ์จะชัดเจนขึ้นสำหรับผู้เล่นส่วนใหญ่

ความคมชัดของสี
ผู้เล่นอาจพบความยากในการอ่านข้อความสว่างบนพื้นหลังสว่าง หรือข้อความมืดบนพื้นหลังมืด เพื่อปรับปรุงการเข้าถึง แนะนำให้คุณเลือกสีข้อความและสีพื้นหลังที่มีความคมชัดเพียงพอ


การไม่พึ่งพาสี
มีผู้คนกว่า 5% ทั่วโลกที่มีอาการตาบอดสี แม้ว่าในกรณีที่หายากจะมีคนที่มองเห็น เฉพาะ ขาวดำ แต่ลองนึกภาพการมองเกมในเฉดสีเทา:

โดยการปรับเปลี่ยนภาพเพื่อใช้ สัญลักษณ์ ต่างๆ ร่วมกับสี ผู้เล่นมากขึ้นสามารถบอกความแตกต่างในการเล่นและในบริบทอื่นๆ:

การไม่พึ่งพาเสียง
เสียงเป็นคุณสมบัติที่ยอดเยี่ยมสำหรับเกมที่ดื่มด่ำ แต่ผู้เล่นที่มีอาการได้ยินบกพร่องหรือใครก็ตามที่ปิดเสียงจะรู้สึกสับสนกับเหตุการณ์ในเกมที่ถูกถ่ายทอด เฉพาะ ด้วยเสียง
พิจารณาฉากต่อไปนี้ซึ่งมีโทรศัพท์ที่ดังขึ้นเพียงแค่ส่งสัญญาณด้วยเสียง และจากนั้นส่งสัญญาณด้วยเสียง และ ช่วยเหลือสายตา
ความชอบของผู้เล่น
มีการตั้งค่าภาพต่างๆ ที่พร้อมใช้งานให้กับผู้เล่นจากเมนู การตั้งค่า ของ Roblox และในเกม รวมถึง ความโปร่งแสงที่ต้องการ, ขนาดข้อความที่ต้องการ และ การลดการเคลื่อนไหว สำหรับการเข้าถึงอย่างเหมาะสม หน้าจอ ส่วนติดต่อผู้ใช้ ของคุณควรรองรับแต่ละรายการ
ความโปร่งแสงที่ต้องการ
การตั้งค่า ความโปร่งแสงของพื้นหลัง จะเชื่อมโยงกับคุณสมบัติ GuiService.PreferredTransparency ค่า 1 หมายถึงผู้เล่นต้องการความโปร่งแสงพื้นหลังตามค่าเริ่มต้น ในขณะที่ค่า 0 หมายถึงผู้เล่นต้องการความโปร่งแสงพื้นหลังแบบทึบทั้งหมดเพื่อการอ่านที่ดียิ่งขึ้นและความแตกต่าง
การคูณ BackgroundTransparency ของ UI กับ PreferredTransparency เป็นวิธีที่แนะนำในการใช้การตั้งค่านี้; พื้นหลังจะกลายเป็นทึบมากขึ้นเมื่อ PreferredTransparency เข้าใกล้ 0
โดยใช้ระบบ การแท็ก ให้นำแท็ก TransparentBack ไปใช้กับไอเท็ม UI ทั้งหมดที่มี BackgroundTransparency เช่น 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)ทดสอบเกม เปิดเมนู การตั้งค่า และปรับ ความโปร่งแสงของพื้นหลัง องค์ประกอบ UI ที่ถูกแท็กควรอัปเดตระหว่าง BackgroundTransparency เริ่มต้นและแบบทึบทั้งหมด

ขนาดข้อความที่ต้องการ
การตั้งค่า ขนาดข้อความ จะเชื่อมโยงกับคุณสมบัติ GuiService.PreferredTextSize ซึ่งค่าเริ่มต้นคือ Medium ผู้เล่นสามารถเลือกเพิ่มขนาดข้อความผ่านระบบการเรนเดอร์ฟอนต์ของเครื่องยนต์ไปยัง Large, Larger หรือ Largest
เมื่อทำงานกับองค์ประกอบ UI โปรดทราบว่าพฤติกรรมต่อไปนี้:
ข้อความที่ถูกจำกัดให้มีขนาดขั้นต่ำและ/หรือขนาดสูงสุดผ่าน UITextSizeConstraint จะ ไม่ หดตัวลงหรือขยายออกเหนือ MinTextSize/MaxTextSize, โดยที่ไม่คำนึงถึงการตั้งค่าขนาดข้อความของผู้เล่น
เมื่อ TextScaled เปิดใช้งานสำหรับ TextLabel หรือ TextButton, ข้อความขององค์ประกอบจะ ไม่ ถูกปรับตามค่า PreferredTextSize
องค์ประกอบ UI ที่เปิดใช้งาน AutomaticSize จะหดตัว/ขยายขึ้นเมื่อ PreferredTextSize ลดลง/เพิ่มขึ้น (ขอบเขตขององค์ประกอบจะปรับขนาดให้พอดีกับข้อความที่เปลี่ยนขนาด)
เมื่อ TextWrapped เปิดใช้งานสำหรับ TextLabel หรือ TextButton, ข้อความขององค์ประกอบจะถูกห่อเป็นบรรทัดเพิ่มเติมเมื่อ PreferredTextSize เพิ่มขึ้น ภายในขีดจำกัดของขนาดสัมบูรณ์ขององค์ประกอบ
ผลลัพธ์ที่ส่งกลับจาก TextService:GetTextSize() และ TextService:GetTextBoundsAsync() จะให้เกียรติกับการเปลี่ยนแปลงที่เกี่ยวข้องกับ PreferredTextSize
การลดการเคลื่อนไหว
การเปิด/ปิดสวิตช์ ลดการเคลื่อนไหว จะเชื่อมโยงกับคุณสมบัติ GuiService.ReducedMotionEnabled ค่า true หมายถึงผู้เล่นต้องการให้เอฟเฟกต์การเคลื่อนไหวผ่าน การเคลื่อนไหวของ UI/อนิเมชัน ถูกลดหรือยกเลิก
วิธีการพื้นฐานในการลบการเคลื่อนไหวจากการเคลื่อนไหวของ UI คือการตั้งค่าพารามิเตอร์ Time ของ TweenInfo ให้เป็น 0 เมื่อ ReducedMotionEnabled เป็น true ทำให้วัตถุ UI กระตุกไปยังเป้าหมายทันที
UI Tween Snap-to-Target สำหรับการลดการเคลื่อนไหว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()
อีกทางเลือกหนึ่งในการกระตุกทันที คุณสามารถจัดการกับ ReducedMotionEnabled ด้วยตรรกะที่ชัดเจนกว่า true/false ตัวอย่างรหัส LocalScript ต่อไปนี้ใช้การเคลื่อนไหวเป็นค่าเริ่มต้น แต่สลับไปใช้การจางเข้าสำหรับผู้เล่นที่เปิดการลดการเคลื่อนไหว ซึ่งส่งผลให้มีการเปลี่ยนแปลงที่สวยงามยิ่งขึ้นโดยไม่ต้องเคลื่อนไหว
การกลับไปใช้ Fallback to Fade Tween สำหรับการลดการเคลื่อนไหว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()
การควบคุมเสียง
การเล่นเสียงต่างๆ พร้อมกันอาจทำให้รู้สึกท่วมท้น สับสน หรือยากต่อการแยกแยะ การให้ผู้ใช้ควบคุมระดับเสียงสำหรับ "กลุ่ม" เสียงต่างๆ เช่น เสียงเอฟเฟกต์ เพลง และการพูดช่วยให้พวกเขาปรับแต่งเกมของตนและมุ่งเน้นไปที่สิ่งที่พวกเขาต้องการ
พิจารณาตัวอย่างเกมที่มีเสียงดังมากซึ่งผู้ใช้สามารถปรับระดับเสียงเพลงและเสียงเอฟเฟกต์แยกกันได้