+1 to C#...
You can use proper OO Concepts with it... that will help you become a better programmer for many popular languages like Java or C++ also. Whil you will not become a Java expert from using C#, getting your head wrapped around the concept of OO usually is the biggest bump at the beginning learning any OO language, so it will be much easier learning a new OO language in the future (also seeing how much Java, C# and C++ share in other concepts and syntax because of their common roots).
One thing to keep in mind is that OO programming sometimes clashes with the Component based architecture of Unity. Unity wants to enforce you using Components, which can sometimes make it hard using proper OO Concepts.
For example, you cannot call a Constructor on a Monobehaviour, if you need to hand parameters to it at start time, you need to come up with some Init() method that you call just after instantiation of the prefab containing the behaviour or adding the behaviour to an existing gameObject. It isn't really a problem, but it breaks with OO Concepts enough to be a nuisance.
And as an OO programmer, you sometimes have the habit of creating your non behaviour classes (like small helper classes that do not need to be called by the engine) as proper OO classes, which can then lead to jarring code, where first a Monobehaviour is instanciated with Unity's own method and feed with data over an Init() method, while the helper class just below is properly instantiated with a normal C# constructor.
That doesn't make Unityscript the better choice though, at least IMO. Just keep in mind that Unity is not REALLY using a proper OO model for its own system, and C# code from other sources might not always work without proper conversion because of that.