アクセシビリティとは、障害のある人々が利用できるように製品やサービスを設計する実践です。最近の統計によると、26%以上の人々が何らかの障害を持っているため、あなたのRobloxゲームをアクセシブルにすることで、より幅広いオーディエンスにリーチすることができます。
テキストサイズ
プレイヤーは小さなテキストを読むのが難しいと感じるかもしれません。以下のゲーム内ショップメニューをぼやけた状態で比較してみてください。これは視力に障害のある人が見るとどう見えるかをシミュレートしています。

小さなフォントラベルのサイズを大きくすると、ほとんどのプレイヤーにとってより明瞭になります。

カラーコントラスト
プレイヤーは明るい背景に対する明るいテキストや、暗い背景に対する暗いテキストを読むのが難しいと感じるかもしれません。アクセシビリティを改善するために、十分なカラーニコントラストを持つテキストと背景の色を選ぶことが推奨されます。


カラー非依存
世界中の5%以上の人々が何らかの形の色盲を持っています。誰かが完全に白黒で見ることは稀ですが、グレースケールでゲームを表示することを想像してみてください。

異なるシンボルを色の横に使用することで、より多くのプレイヤーがゲームプレイやその他のコンテキストでの違いを認識できるようになります:

音の非依存
音は没入感のあるゲームにとって優れた追加ですが、聴覚障害者や音声をオフにしている誰かにとっては、音のみで伝えられるゲーム内のイベントに混乱するかもしれません。
音のみで通知される電話の鳴る場面と、音と視覚的な手助けで通知される場面を考えてみてください。
プレイヤーの好み
Robloxとゲーム内設定メニューから、様々な視覚設定がプレイヤーに提供されます。これには推奨透明度、推奨テキストサイズ、および動きの軽減が含まれます。最適なアクセシビリティのために、あなたのユーザーインターフェースはそれぞれに対応すべきです。
推奨透明度
背景透明度設定は、GuiService.PreferredTransparencyプロパティに対応しています。値が1の場合、プレイヤーはデフォルトの背景透明度を好むことを示し、値が0の場合、プレイヤーは読みやすさとコントラストを向上させるために完全に不透明な(非透明)背景透明度を好むことを示します。
UI要素のBackgroundTransparencyをPreferredTransparencyで掛け算することが、この設定を使用する推奨の方法です。PreferredTransparencyが0に近づくと、背景がより不透明になります。
タグ付けシステムを使用して、BackgroundTransparencyを持つすべてのUIアイテムにTransparentBackのタグを適用します。これにはTextLabelsやFramesが含まれます。

異なるBackgroundTransparencyレベルを持つ四つのTextLabel要素 次のコードをLocalScriptに貼り付けます。
推奨透明度の動的調整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)
推奨テキストサイズ
テキストサイズ設定は、GuiService.PreferredTextSizeプロパティに対応し、デフォルトはMediumです。プレイヤーはエンジンのフォントレンダリングパイプラインを通じて、テキストサイズをLarge、Larger、またはLargestに増やすことができます。
UI要素を操作する際は、以下の動作に注意してください。
UITextSizeConstraintを介して最小サイズおよび/または最大サイズに制限されたテキストは、プレイヤーのテキストサイズ設定に関係なく、設定されたMinTextSize/MaxTextSizeを下回ったり上回ったりすることはありません。
TextScaledが有効なTextLabelまたはTextButtonのテキストは、PreferredTextSize値によってスケーリングされることはありません。
AutomaticSizeが有効なUI要素は、PreferredTextSizeが減少/増加するとともに縮小/拡大します(要素の境界が resized text に合わせてサイズ変更されます)。
TextWrappedが有効なTextLabelまたはTextButtonのテキストは、ウィジェットの絶対サイズの制限内でPreferredTextSizeが増加するにつれて追加の行に折り返されます。
TextService:GetTextSize()とTextService:GetTextBoundsAsync()の戻り値は、PreferredTextSizeに関連する変更を尊重します。
動きの軽減
動きの軽減トグルは、GuiService.ReducedMotionEnabledプロパティに対応しています。値がtrueの場合、プレイヤーはUI アニメーション/ツイーンによる動作効果を減らすか完全に取り除くことを望んでいます。
UIツイーンから動きを取り除く基本的なアプローチは、ReducedMotionEnabledがtrueの場合にTimeパラメーターを0に設定することです。これにより、UIオブジェクトはターゲットにinstantにスナップします。
動きの軽減のためのUIツイーンスナップ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()
instantスナッピングの代わりに、ReducedMotionEnabledをより明確なtrue/falseロジックで処理することもできます。たとえば、次のLocalScriptはデフォルトで動きのツイーニングを使用しますが、動きの軽減を有効にしたプレイヤーのためにフェードインに切り替わり、位置の移動なしでより優れた移行を実現します。
動きの軽減のためのフェードツイーンへのフォールバック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()
音量コントロール
同時に再生される異なる音は圧倒的で、気が散るか、区別するのが難しいことがあります。さまざまな「グループ」の音声、たとえば効果音、音楽、スピーチの音量を調整できるようにすることで、ユーザーは自分のゲームをカスタマイズし、必要なものに集中することができます。
非常に騒がしいゲームの次の例を考えてみてください。ユーザーは音楽と効果音の音量を別々に変更できます。
