Recently I began writing a plugin for Unity that would make the user interface of apps (using uGUI) accessible for blind and sight-impaired users. If you missed the first two parts of this dev blog, read them here and here.
Label, Value, Type and Hint
For the most part, I followed the iOS VoiceOver design for my plugin, because it makes the most sense to me. Each UI element has a label, a value, a type, and a hint. All of these will be read out when a UI element is selected, unless the user makes another input. (Note: There are a few optional additional properties, such as traits, language and frame, but those are kind of out of scope for this plugin.)
This allows the user to quickly scroll through the UI elements, and getting the most relevant information (the label) first. If he needs more information, he can stop and listen to the rest.
Here are two examples of how that works:
The selected UI element is a toggle for the ingame tutorials. The system would read out “Tutorials”, then after a brief moment it would add the value “Enabled”. After another moment it would read “Switch” to explain the object type. After a longer pause it would then add “Double tap to change.”
The selected UI element is the PLAY button. It has no value, so this part is skipped. The system reads out “Play” then waits for a brief moment and continues “Button”. After a longer pause, it reads “Double Tap to Select”.
First Running Version
A first version of the plugin with some very basic functionality is implemented. The UI can be marked up with accessibility components and the plugin – if enabled – will automatically navigate through them, read them out and allow the user to interact. The plugin currently supports Text Labels, Buttons, Toggles and Sliders.
Everything is currently made to work with the new Unity UI (uGUI). I have a task on my list to look into NGUI as well, but it is pretty far down the list. Once it is working, I am hoping it won’t be too hard to adapt it for the different UI systems Unity has to offer. My feature wishlist in JIRA has been growing steadily since I started.
The plugin also includes yet another feature from VoiceOver: iOS puts a frame around the currently selected UI element. I know that this is completely useless for someone who is blind. But as a sighted developer, I find it incredibly helpful. So I added that in as well.
Because I develop on a Windows PC, and because I am lazy and don’t want to build and run on my Android phone for every little test, I built a quick library to access SAPI, the Text-to-Speech system that comes with every Windows installation. This allows me to test directly in the Unity editor and still have my screen read out to me. As a side effect, since I already implemented the keyboard controls, the plugin now supports Windows as a platform.
I found a wonderful article by Matt Gemmel about common misconceptions from sighted people about making their apps accessible. It’s well-written and easy to read, and definitely worth it if the topic interests you even a little bit or if you are considering making your own app accessible. Here is the link.