This question has been asked and debated over too many times in the past. My questions don’t pertain to the previous discussions, instead they highlight my other concerns.
Most of the Unity game programmers I have come across have vast C# knowledge as opposed to UnityScript. Can I infer ,that , it is easier to FIND and hire Unity developers and programmers who specialize in C# as opposed to UnityScript. This is to ensure that expanding my team at a later stage shouldn’t be a problem.
Secondly, When it comes to performance, I know by now that both UnityScript and C# are almost similar. Since C# was introduced by Microsoft, will it continue to have some dependency towards other Microsoft products or languages/technology? It will be easier if someone can explain (or lead me to) how Unity changes the UnityScript and the C# code to machine independent deployment.
Thridly, Debugging tools - Unity 3 released the Script level debugger. But how easy is it to integrate a UnityScript based project VS a C# project when it comes to IDEs. Which is easier to implement (code completion, error spotting, debugging etc) if programming in either is not an issue.
On a side note, which editor has support for version control. By editor, I mean UnityScript editors and C# editors.
Edit 1: I was in a hurry while typing this and didn’t use my words properly. I agree that C# is a language introduced by MS and it is not a Product like Windows etc.
Skipping the first one, I’ve never looked to hire Unity developers.
Second: Neither is a Microsoft product. .NET is a Microsoft concept and all .NET languages compile into Microsoft’s intermediate language. .NET as a whole is an intermediate compilation for a managed language. What makes it nice is that there are dozens of languages that compile to it, and therefore can intercommunicate. So UnityScript can read C# classes, and VB.NET classes and they can all intercommunicate. It is also Managed it that it cannot truly memory leak, and handles Garbage Collection, as well as containing concepts such as Reflection and Type info built in.
However Unity doesn’t use .NET, it uses Mono which is a cross platform replica of .NET. This means that Unity’s Scripting is platform independent and not in any way connected to Microsoft in any language.
In short all languages in Unity are converted to the same underlying code, none of which is dependent on Microsoft. It merely copies relies on an open source library that copies Microsoft’s idea.
Third: I’m unsure of PC, but I think that the debugger is setup with Monodevelop. Either is quite easy as Unity handles most of the heavy lifting of creating the project. They both contain similar features however Monodevelop is slightly less polished. Edit: I read this wrong. I would assume C# has better as far as Error spotting and Code Completion, as it’s officially supported by the IDE. However I only use C# and am unsure.
As for Version Control, you need PRO (something I don’t necessarily agree with), but you can either use the Asset Server built into Unity’s editor (for a cost) or you can use any existing Source Control, like Perforce or SVN. Source Control is editor agnostic, and doesn’t care which editor is used (although you can get plugins for editors sometimes for integrating SVN into VS, although it’s the editor relying on the SVN then and not the other way around).
It’s likely that C# developers in general are going to be easier to find for a wider range of skills. Most people who have learned javascript for something other than Unity have learned it for the very specific domain of web programming which may or may not restrict their abilities starting out. That said, a good programmer in either language should be able to learn the other without much hassle.
C# was created by Microsoft, but it’s an open standard. In addition, they’ve made a legal statement indicating that they will never sue mono (or anyone using mono) for any parts of that open standard. Mono itself is an open source project that implements the C# standard and .NET CLI, and that is what Unity uses.
I don’t know this for sure, but if I had to guess I’d say you would have more luck with C# in this realm simply due to pre-existing tools like VS and monodevelop.
Actually, C# is not a product, it’s a language developed by Microsoft that’s now ISO standardized. Monodevelop and Unity are non-Microsoft products that allow you develop, debug, and compile C# code. The set of build targets that Unity supports is the same regardless of language choice or IDE. You can certainly develop applications for the iPhone or Android in Unity with C#.
That is the current situation I find myself in. More (Professional) game developers stick to C# in spite of UnityScript being easy to implement. I do know that there are lots of really good Game Devs who still use Unityscript for programming. But what is the reason for these developers to stick to C#. Most of the developers start out with UnityScript and then switch to C#. Few say it is for accessing libraries easily and few say dynamic typing is a lot more difficult in large projects. But are there any other reasons which am overlooking?
I now fully understand how Unity compiles the files and deploys it for various platforms. Based on various polls, it has been revealed that both US and C# have equal followers. So the editors are mainly based on the language with which I may head.
Version control seems to be an issue currently. I have the PRO and getting the Asset server is currently not an issue. But since we use SVN for other developments, I may have to stick with SVN and heard that there are certain editors like VS which support them.
Yes I agree that C# is a tech/language introduced by MS, but implemented in Unity by MONO. I just wanted to ensure that the Game deployed is independent of everything and has no problems whatsoever. The recent Unity - Apple trouble did create some scare, although it was clarified and we now have the green signal. If MS were to create such a scare at later stage, then it would turn real bad. I may be going way off topic, but wanted a better picture of things.
Explicitness - C# scripts are explicit about types, with few exceptions. UnityScript scripts often rely on inferred or dynamic typing. When you want to be explicit, the syntax is shorter in C#. C#: “bool isReady”. UnityScript: “var isReady : Boolean”. When I see explicit, static typing I see code that’s more readable and has one less thing to debug. Another example is how C# scripts list the classname and parent class.
Usefulness outside Unity - C# can be used to develop desktop and mobile applications outside of Unity. These sorts of applications are also in-demand. Unityscript is only for Unity.
Similarity to other Languages - C# is more similar to C/C++ and Java, while UnityScript is more similar to Javascript. I see a heckuva lot more high-paying software development jobs that require C/C++/Java than JavaScript. Even when I’ve developed largescale web applications, most of the engineering time was spent on the database and server code, although knowing some Javascript was of course essential.
But, like most programmers, I can code in either language without too much trouble.
You do not have to worry about C# going the way of the dodo, or somehow being “disallowed” by Microsoft. It’s here, and it’s here to stay (and every couple years it gets better!)
Developers can program C# in Visual Studio. That there is a huge plus.
Like Ostagar said, the strictness of C# makes for far more maintainable and readable code, especially when multiple developers are working on the same source code. C#.NET developers are in much greater supply and can very easily adapt to using Unity (for them, it’s only a matter of utilizing a new 3rd party library API – a practice which is standard in any .NET development)
Regarding code versioning, at work we have all our scripts tied with SVN and do all our programming in Visual Studio. We do have a VS plugin AnkhSVN for version control, but 95% of the time we just maintain it outside anyway with TortoiseSVN.
Frankly, if you’re looking to develop a professional game which requires multiple professionals, it simply is no contest: C# is the way to go. Yeah, that might offend some of the UnityScript developers here (hats off to you guys using it), and maybe I’m not in a position to judge, but that’s just how I personally see it.