I evaluated Unity3D for a few months before deciding NOT to use it. It’s a really, really great tool and it was a tough decision. Ultimately I felt like there was more resitance to steady progress using Unity3D over extending/upgrading my own code. Here is a rough guide to why I decided not to use it.
C# is not a natural AI language
Now for many this isn’t an issue. C# is a great language. Compared to Lua though C# is too verbose and too cumbersome (not as cumbersome as C++ but close). It just takes too long to express simple things in C#. The screen is filled with too many curly braces. A lot of the verboseness comes from C# strong typing. Strong typing is a great feature and many bugs are caught early using it. However for me the slowest bit of writing a game is writing the scripting/behaviours/AI. It’s also the bit I’m least comfortable with as it’s all about nuance and anything that resists quick change and ‘play’ is a hinderance.
Crash after crash (at least at the start)
For the first two weeks of using Unity3D I just got too many crashes in the editor. Most were to do with importing animations. I reported a bug and nothing really happened about it. The bugs were OS X specific (the same steps didn’t crash on Windows XP or 7). Once I’d got through that animation rough patch I only had the odd crash, nothing I’m not used to with my own software ;)
Most of the crashes I could work around by using windows or chosing a different path through the editor. This left a bad vibe with me though. What other bugs might be lurking within. Probability says “not many” since so many other devs are using Unity3D, but what lurks beneath?
Unity3D’s strength comes from it’s flexibility and price point. It just can’t be beaten at the moment… apart from the forums. I imagine since going ‘free’ Unity3D’s forums have taken a real nose dive. There is frequent incivility, frequent arguments about the ‘best way to do something’ and no one with authority seems to step in.
I realise this is the internet and every asshat with a keyboard is Carmack but I don’t want to wade through Asshat Carmack stupidity when I am stuck.
Lack of Control
Personally I like to control the code that I work with. I’ve been writing games for thirty years and I’ve always controlled the code. While I enjoyed making a prototype game and I learned a hell of a lot I was nervous being this far from the metal.
The game I was prototyping needed voxels. So I looked at how to extend Unity3D with my own type of mesh and collision primitives. C# is a poor scripting language but it’s a great systems language so I thought this would be easy, maybe there was a good module I could buy?
I really struggled to get an overview of the system and how to extend it. There are bits and pieces all over the place but I wanted one canonical document on how to extend the codebase. I wanted to interface Polyvox with Unity3D (something they would later announce they were doing anyway). Once again there was too much resistance stopping me from making progress.
I looked at buying modules but at the time (late 2013) there didn’t seem to be any modules I could buy to get me over this hump. No modules offered an evaluation period. I had very specific needs of speed and voxel density, I didn’t want to pay $2000 for something that didn’t meet my requirements. Since I wasn’t cloning Minecraft and didn’t need an infinite draw distance I was worried I was too niche.
The HUD Code
Oh my god, the immediate mode HUD stuff is bloody rubbish. I know this is a well documented problem and it’s being fixed but how long is it taking and how many devs have complained and oh my god how much of a PITA is it. Compared to the rest of the code base this is undergraduate quality.
The way unity deals with controllers is amazingly bad. Of all the interfaces they provide this is the one where there is no justitifcation for such a bad interface. It makes dealing with PS3/4 and XBox controllers a real PITA.
Everyone writing games should spend some time using Unity3D. It’s an amazing piece of software written by an amazing group of people. If you’re just starting out making games, have limited time or limited budget then it’s basically a no-brainer. If however you have a niche technical angle, a shit load of experience, a codebase you can work with then, well it’s not quite so clear.
Many of the stress points in making a game come from the polish end 10% (that famously takes 90% of the time). Unity does a lot to empower the non-coders in a team to polish. For me as a coder it doesn’t add much and may even hold me back by pushing C# and limiting extension.
Ultimately for me, as an engine coder, the crash bugs just gave me the willies. I’ve spent many a long night fixing crash bugs and burning CD’s for, or uploading to, Sony, Nintendo and Microsoft and not being in control just adds too much stress. Despite knowing many devs are happy with that I’m personally not happy with that lack of control.