TDI.online Tech. Music. Games.

Unity...

Unity I’ve been meaning to write about Unity for a while. I basically live in the Unity editor and have done for the last 2 years, so - and in a fairly tangible way - Unity can have a profound effect on my quality of life. (Today has not been a good day…)

You’ve probably heard of Unity, but if not, it’s one of a slew of modern game engines that are ‘free’ (as in beer) for any game developer, big or small, to use. It aims to be the one-stop-shop for developing on anything from a mobile phone or web page, to a PS4 & high end PC. It’s been around for years, is reasonably well documented and fairly easy to learn, which has made it a hit with people just starting out and anyone - like me - that’s budget conscious.

In many respects it’s also responsible for the democratisation of the game engine market, the wild success of version 4 clearly helping tip the hand of Epic into changing the licensing model for Unreal. Between them, these two engines have changed the landscape for pretty much everyone. Instead of paying thousands (or hundreds of thousands, in Unreal’s case) for an engine, you now get pretty much the exact same tool-chain that a AAA dev would need, with a team of 100s supporting it for you, all at next to zero cost. This makes Unity a massively important tool, not just for developers but for the industry as a whole.

I’ve been using Unity since the start of the v4.x series, so just over 2 years, as I said. Compared to in-house engines that I’ve used in the past, the Unity editor is a pretty flexible place to work. It’s fairly easily customisable, allowing you to tool up for pretty much anything you need to do on the content creation side. The engine is scriptable via an Entity Component system that’s very loosely coupled and, as such, very expressive. Components can be written in Javascript (spit) or C#, and if need be you can drop into C or C++ through a plugin API, as well as ship with your own DLL and/or shared libs. It ships with a forward and deferred renderer, which since version 5 also uses a realtime GI system with metallic and specular workflows for material setup.

It’s pretty powerful stuff, given the price, and clearly better than anything I could have written on my own. For the large majority of work Unity doesn’t get in the way. For everything else, Unity is the bane of my fucking existence and I can’t wait to stop using it for a while.

I’m increasingly coming to believe that the vast majority of Unity developers don’t actually use what they build, as some of the decisions that have been made recently are just completely brain dead. (I’ll assume you’re familiar with Unity past this point as I go a little ranty, so apologies if you don’t know what I’m talking about…)

For a start, the editor has the same usability bugs that it’s had since I started using it.

  • Every setting in the inspector window is changed as soon as you edit it except the fucking name of the game object, which requires you to press tab. Every. Single. Time. I get bitten by this. Stop. Edit. Tab. Play. Get back to testing...
  • You can edit multiple components simultaneously, except for the random ones that you can't. Want to change 1 setting for a bunch of particle systems? Tough shit. Make them a prefab or GTFO.
  • Oops, prefabs in prefabs.
  • Want to keep your hierarchy organised, so, you know, you can find things without searching for it? Fine, use empty game objects and name them so they make sense. Except if you're using UI objects, because their order in the fucking hierarchy define their z-order when rendering. 
  • No, you still can't drag multiple prefabs into the scene at once if they've got the wrong components attached.
  • No, you still can't drag multiple game objects into the prefab folder at once.
  • No, you can't populate an array in the inspector unless you individually drag each game object in by hand, or write a fucking script to do it at runtime.
  • No, you still can't duplicate a material (or much else) in the project window. Off to explorer for you!
  • What fuck-wit decided the depth cycling selection was a good idea? Just pick what I've clicked on ffs. :(
  • You've selected a massive bunch of game objects for multi edit but need to filter out the empty holders. The hierarchy will helpfully scroll as far down as it can, every time you make a selection change, doubling the length of time it'll take to do this.
  • Made a change to a prefab, but hit apply with a child game object selected? You now have a 50/50 chance of every prefab of that type containing random garbage in every component. Have fun fixing that.
  • Fiddly arse curve editing all over the shop.
  • Duplicate component as values working some of the time, depending on what sort of component it is.
  • Lol. Project window.
  • Lol. Mecanim editing.
  • Lol. Asset store window OMFG everything's crashed. 
  • Roll roll roll, my god what speed has the scroll wheel picked for itself... gngng.

What about the fundamentally broken stuff?

  • Package system will create duplicates of imported files unless they come in via the store. Want to update FMod? Cool, get ready to rename all the imported files by fucking hand outside of Unity so the meta files don't get deleted leaving every game object in your project that references them a broken mess.
  • Mecanim. Oh god. Where the fuck to start. My fav is trying to debug mecanim transitions. Best way I've found is to run the game at 3 fps so I can see what the fuck it's doing. How about breakpoints in animations? Or even the ability to cut and paste in that stupid window?
  • Unity UI. Better than nGUI but still riddled with bugs. But it's fine, it's open sourced! Yeah? How about getting the fucking images to stop rendering garbage for a frame when enabled. Or even just disappearing for no reason.
  • Audio. Mix channels are fine and all that, but how about finishing the job of integrating Fmod so the basics of Studio are available to everyone. Or if not, give us compound audio elements so there's a start, loop and exit setup for audio sources.
  • Serialising. Ugh.
  • Input. Good fucking God, what were you thinking.
  • Light baking. When I tried it, Enlighten just seemed borked. Lumo ended up running as realtime deferred, which is why it'll struggle on low end GPUs. I've heard this may be fixed, but I've wasted enough time on it.
  • Occlusion culling. One day I'll work out the incantation to get this to do what I expect, but in the meantime I'll make games with tiny isometric rooms and avoid it.
  • Non deterministic FBX import? What fucking year is this? (Tbf, I wouldn't put it past 3DS Max to be writing out animations differently each time, so maybe this one isn't Unity.)

Or the mildly irritating?

  • For the love of god someone start filtering through the Asset Store to weed out the crap. It's like a bomb site of badly written, half arsed code, some of which might work in version 4, some of which might work in version 5. I've wasted money I can't afford on code assets with good reviews that end up being buggy messes I've had to fix, or just dropped entirely. Actually, I dropped all but one.
  • Stability is shocking. I'm constantly forced onto patch releases because mainline features are broken. Mecanim shipped with quaternion blending between poses broken. Particle systems stopped working. It's never ending, and this is after the supposed move to unit testing the entire engine!
  • Whoosh! That's the sound of the Unity roadmap being pushed back! Retina support in the editor? 2.5 years and counting. Multi-threaded rendering? lol
  • Mono is now old enough to vote. But don't worry, Unity are going to invent their own scripting language. Cos that's never gone wrong in a game engine before. I think I have the source to GEL somewhere, I can save you a bit of time...
  • Did that Assert thing ever land?
  • Thank you very much for putting all the new UI stuff in it's own namespace. Lemme guess, this was so UnityEngine.UI.Image didn't conflict with nGUI's UIImage? Fuck's sake.
  • Hahaha, has anyone looked at video playback on a texture recently?!

I could go on, but it’ll just be listing the Unity Bug Tracker. And trust me, I could go on.

A lot of these complaints I could have written when I started on the 4.x series. That’s not good. It seems, as an outsider, that there’s a desire within Unity to add features rather than finish off what’s shipping. Mecanim is moving at a snail’s pace, and has caused me no end of problems. Given the choice of using Unity’s UI or rolling my own, I’d roll my own. We’re never going to see proper audio support without middleware. Fuck only knows when the HTML5 support will be ‘finished’. But hey, these are all great tick boxes on a website, and we can show them in a You Tube video, so they must be good enough…

And what about the platform support? It’s a noble aim to support every GPU known to man, as well as the CPU architecture the aliens from Independence Day are rocking, but Unity’s quest to be all things to all people is rapidly leaving it in a state where it’s a half-fit for a subset of uses. Unity 5 did improve a lot of things - thank fuck I don’t need to run 3 different versions of the editor just to output console builds anymore - but it broke as much as it it brought in, as the ever sliding roadmap will attest to. And how well does the new lighting system actually work on mobile? I’d hazard not at all, so it’ll be fun playing with all that ‘Legacy’ labelled stuff, 6 months from now…

Meh.

Unity is creaking and it’s a real shame. It smells of a legacy code-base groaning under the weight of its own feature set, while the company moves forward at a unrelenting speed. This is a massive shame, because for a while there, in 4.6, I had pretty good performance, a nice feature set and a rock solid work environment. If it wasn’t for the console skus I probably would have shipped with that. Right now, in the 5.x series, I’m lucky if I can get through the day without the editor falling over or running head long into a bug.

Just stop guys. Take a fucking breather. One of the big draws to Unity was that it worked for what I needed. It can’t claim that anymore. The race for feature parity with UE4 on the render side is good an all, but not at the expense of everything else being half arsed.

I’m not going to wait for 5.6 to sort this stuff out.