Doesn't instantiate clone objects like this?
Is there a place where one can speak with developers of Unity? Because that seems like a question they would know. There has to be code that tells what is being selected, or there would be no way for the keyboard to navigate through the different items.
Perhaps post what you just said about the inspector on the
Unity Forum
and that can be the first thing that is made accessible once we get enough votes.
Am I not mistaken that every object in Unity is named? If that is the case then it would be a matter of sticking a say command in the render function.

Thumbs up

I tried your updates to the debug and I think a sound would be better. NVDA doesn't get the focus instantly sometimes and so if there i is an error, it doesn't read.
But something stranger is happening. Make:
            audioSource.Play(;
and run it. The debug file does not update.

Thumbs up

Yes, a sound would be better. And maybe a keyboard shortcut that could read out the current errors on command? So that the user doesn't have to search for the log file at all, just listen to the current errors on demand. It would also solve the problem of missing some vital information, such as the filename, since it can be repeated.
What do you think?
Do you have a sound in mind? It could either be a pre-recorded voice message or a sound effect.

Thumbs up

That sounds perfect. Could it just be an error system sound? If that is not cross platform, I can find a random sound to place in the screen reader's folder.

Thumbs up

30 (edited by mikrima 2016-12-07 01:53:50)

Done, there is now a sound playing when the console logs an error. It is also played when the user tries to enter game mode and there are still compile errors.

I would still like to make a keyboard shortcut that could be used to read the current errors from the console out to the user. Or maybe rather a menu entry? I already added a menu anyway, so that the GUI accessibility (the little that there is) can be turned off. Just in case someone doesn't want there to be extra text sent to NVDA.

I also tried reproducing the error that you mentioned, by removing the closing bracket after audio source play.
But it didn't happen for me. The log file updated and the error sound played as well. Can you confirm that this is still happening?

Thumbs up

You are amazing!
I got it to work, I needed to press ctrl+s after pulling the updates and it worked.
I think that any keystroke like ctrl+shif+c or whatnot could work. Just pasting it to the clipboard would work as well, but I think some people have important things on their clipboard. Perhaps if there is a way to open up a window with the error text so one can copy and paste it it would work even better. This is done in the [vertual revisions addon for NVDA, but I wonder if it could be done in Unity? It's probably a little too difficult currently when this is already great!

Do you think there could be a quick sound ascending in pitch when the play window opens and a quick sound descending in pitch when the window closes? I am just guessing currently and it is a little confusing.
I can't wait until I have time to start using this plugin in development! (It will be soon!)
Another question:
Your accessibility plugin is able to wrap native widgets in IOS and Android. Is it able to do the same in Windows, mac, Linux and Web as well?
I am mostly thinking of text boxes and form elements like buttons.

Thumbs up

You mean for a sound to play when game mode is entered or left, correct? Right now there should already be a spoken text when game mode is entered, but not when it is left. Just making sure we are talking about the same thing.
I like the idea, a sound would probably be better than text, because it is much quicker and less intrusive.

I'll look into the keyboard shortcut. I also want to make this a menu option - that way no one has to memorize all kinds of keyboard shortcuts by heart. NVDA already has a ton by itself.

Thanks for the  link with the virtual revision add-on. I like the idea of opening a text window very much. I'll have to investigate a little though.

The accessibility plugin unfortunately doesn't actually wrap the Unity UI into native widgets. It quite literally re-implements the entire functionality of VoiceOver and TalkBack. It's a screen reader on its own. It was the only way to get it to work properly.
The only thing it needs is some way of generating speech, then it is almost platform independent. Almost anyway.
Currently it only works on iOS, Android and Windows (with either SAPI or NVDA). I plan on adding support for Mac and Linux too.

Web is a different story, because there are some WebGL specific issues that stop the plugin from working properly. Support for that is currently not on my roadmap

Thumbs up

[wow]... I have attempted to duplicate screen reader functionality and it is not easy!

Yes, I mean when you press ctrl+p to play and stop play mode. NVDA will speak the first time, but not any times after.
Do you just send say commands to the screen reader and that is how you communicate with the screen reader? If so, you can just add an element to the page with a role="status" and update it any time you wish something new to be sent to the screen reader. There is also mespeak.js that is a screen reader in Javascript.
ESpeak is a very lightweight screen reader that is free. you could bundle it, but most people think it sounds a little harsh.

Thumbs up

Updated the project to properly play a sound effect when play mode is entered and when it is left again. The sound might be a little loud, let me know and I'll tune it down.
By the way: All three sound effects in there are public domain licensed, so there are no legal issues using them.

Thumbs up

35 (edited by mikrima 2016-12-14 18:11:20)

I have been looking into Tolk again and with some help from Mike (Skull Girls) got it to work.
The problem is that some of Tolk's dll libraries will need to be in the same folder as the Unity Editor executable, if it is supposed to work in there. They would need to be manually copied, which is not a great solution. Or we'd need some kind of installer or script that could put them there.

Also, frastlin, let me know when you start development of the Go Fish game.

Thumbs up

Micrima, Franstlin, thanks to you for having done this  great project.
I'm a small debeloper, and my strong languaje is presisely c#. One of the engines that I want to try a lot of time back, is unity, but because it's accesibility was impossible until today.
For now, I have to install unity and config all of the debelopment tools that i have to use to start to try the script and template, but for now, thanks to both of you of this great job.

Micrina, in you blog, you post something about this? It will be very great if you post any information about this template or a post about tips for blind people that want to use unity, like your update post about UAP.

Well, for now, thanks for all tongue

Thumbs up

sanslash, let me know if you have any questions. The githup page has most of what you need. Please try this, C# is not my main language and game development is not my focus at this time, so neither of which give me much time to work on this setup. It needs a little more refining before new developers can feel comfortable using unity. Please let me know your thoughts and I really want to see what you can create. Who knows, you may be the first blind developer to create a game in Unity!

Thumbs up

of course, if I can do something playable, y tell to you to try it tongue

For now, I'm not planing nothing special, but for start, something training exercises will be good with unity. To familiarice with the engine, know concepts, and of course, try to see witchthings really you can do without the support of the editor.

Thanks. cloning the repo.

Thumbs up

Hello @Frastlin

Well, I achieve the template working, but Now, I have other problem.
How to generate the solution file to open correctly the project in visual studio?

Currently, I can open the scripts (cs) files in visual studio, but opening directly the code you don't have any of the tools that vs provides to help your life. specially intelliscense.

can you upload to the git template the createdsolution file? I know that you can generate that file to after open with visual from directly from the unity tongue

Thanks for all!

Thumbs up

sorry, I don't use visual studio. I write everything by hand. The base template I made this off of had VS stuff in it, but I have changed everything around from there.
Is this something a sighted person can click and generate? I have VS on my computer, but don't use it.

Thumbs up

Hello @frastlin,
Yes, supposedly you can click something inside unity, after open the project.
this is a ... old documentation, but you can do something similar to generate the sln.

https://docs.unity3d.com/Manual/VisualS … ation.html

Currently I don't have ani eye near to try this, but if you got that works, the result is a .sln file in one of projects folder tongue

If you get something, please upload it. ¡thanks!

Thumbs up

Done, you need to go to assets, create, C# file, type the name and hit enter twice. then VS will open and your sln file will be created. but I just pushed the sln file I made, so have fun! let me know if you have trouble.

Thumbs up

Done @Frastlin! Thanks soo match! Now, try to do something fun :V

Thumbs up

Hello again @Frastling.

A Small question. In the template, the example script, in the main method is ataqhed to a GameObject created at runtime in the same main method. But, in the editor, that main method is atached to something else? Or is atached directly to the scene.

In the majority of tutorials, the c# scripts are attached directly to gameObjects from the editor, but in the case of our template, our  main entry point of coding is attached to what?

I ask this, for look how I have to think when i want more than one scene. like a menu, and the play window, etc.

Thumbs up

@mikrima Can you give your feedback on this?
This is Unity’s structure:
scene / game object / component

Scene:

https://docs.unity3d.com/ScriptReferenc … Scene.html
Scene manager:
https://docs.unity3d.com/ScriptReferenc … nager.html

Scene is a self-contained collection of GameObjects. Use scene to move between levels or switch between main menu and the play screen. Scenes are really good at creating and destroying all their objects.
You use the scene manager to create, load and do everything with scenes.

GameObject:

https://docs.unity3d.com/ScriptReferenc … bject.html

GameObjects are the core of the game. Everything that is an object should be a game object. This includes chickens, swords and the inventory menu. Game objects belong to scenes and are swapped out when the scene is swapped out. Game objects can have children and be duplicated really easy.

Components:

https://docs.unity3d.com/ScriptReference/Component.html
Or MonoBehaviour, the generic component class:
https://docs.unity3d.com/ScriptReferenc … viour.html

Components can be anything that is not a Game Object or a scene. The ExampleScript is a component. You don’t make instances of the component class, instead you make instances of other classes like MonoBehaviour or AudioSource. Components are any class you attach to a game object.
Components do one thing, so MonoBehaviour is considered the generic component class.


Unity higherarky:

Scene
Game object
Component

Game objects and their components are what you will deal with mostly.
Hope this makes things a little clearer.

Thumbs up

Hello @Frastling, thanks. And yep, it give me some tips to proceed. But...
The example script is a component. ok. But ¿what is the gameobject that is the parent of the exampleScript?

I Know that i can create more gameObjects in the main method, and create more scriptClass to assign to this new gameObjects, but. ¡Can I manage scenes from the eexapleScript?

Thanks tongue

Thumbs up

yes, you can manage scenes through:
using SceneManager;
at the top of your script and then anywhere you have anything to do with the scenes, you can do it.
Read the documentation on MonoBehaviour which is the parent of ExampleScript. The game object that ExampleScript is attached to is called obj and is in the main function:
var obj = new GameObject("Test Object");
This is a new game object named "Test Object" that is refferenced in this function by the variable obj.
I don't think obj is attached to any scene, but there is a method you can use to read if obj is attached to any scene. I think the line:
[RuntimeInitializeOnLoadMethod]

is what allows GameObject to be initialized without a scene. But to play, you are opening mainScene.unity, so that may make obj attached to mainScene because that script is attached to mainScene.
To move a game object, you use:
MoveGameObjectToScene
I'll let you know if I find anything else.

Thumbs up

Remember, you are not accessing the main loop at all. you are just accessing scenes, objects and components. Unity makes it so you just need to make objects and say how those objects react with one another. There is no real manager except for sceneManager and main.

Thumbs up

thanks @Frastlin for all the tips!

Well, a other small question. The gameObject created at main function, are automatically added to the mainScene? or after create it, I have add to main Scene manually.

I know that throug sceneManajer i Have functions like getCurrentActiveScene, loadScene or someting similar, but my doubt is... If for example I wanna create a scene with their gameObjects, for a menu, and when the menu ends with their actions, How to I can create (throug code ofcourse) other scene, for the new set of gameObjects for the game itself... And ofcourse, if I want I can re create the menu when I want return to it.

I have a Small idea, trying to using the main method like  a scene manajer but... IF you have some ideas, is better ear them first ^ ^

¡thanks!

Thumbs up

Remember that Unity is meant to be used with the editor. This means that things are going to be a little funky.
I don't know the answer to what scene objects are attached to. But I am guessing that it will be main scene. If you want to create new scenes and attach objects to them, see my above posts. Scene manager creates scenes. But scenes are meant for sighted users to more structure their code, although we can use them to manage objects. Unity won't stop you from doing what ever you want, you just may not know anyone else doing what you are doing.
Just look at the scene attribute of an object to see what it is attached to.
Using the main method as a scene manager sounds perfect! That is what I would do as well.

Thumbs up