People seem to have a love / hate relationship with Unity. For many years I hated Unity and avoided it with a passion. I appraised the tech early on, when I worked for Disney. Unity was only a year old and we used it to build some prototypes to see if it could be a viable replacemnet for some of our aging and clunky homegrown tech. We sunk a load of money into them, and got special treatment but, overall the exprience was fairly negative. The tech was new and extremely unstable. Projects would crash constantly, and things would just dissappear or break for no reason. I came out of the whole exercise pretty much hating Unity. Now some would say half jokingly, that things haven’t changed for Unity, and it’s still plagued by instability and mystery crashes, but really, if you could put Unity-then next to Unity-now, they’re like night and day.
So what happened? Why did my attitude change and why did I pick Unity to build Immortal Darkness? Well, the truth is, I didn’t choose it. In fact, my attitude towards Unity had remained unchanged right up until I installed it and spent the first day working on this project. All my prejudices from my time at Disney, struggling with Unity’s flaky tools and tech, were firmly in place. My artist, partner on this project, and good friend, Damon DuBois actually talked me into giving the tech another chance. He’d just spent a good year plus using and working in Unity, and he loved it. He felt super-comfortable with the tools and the environment, from the art side, and relished the idea of NOT having to write any code.
So I half-heartedly agreed and duly installed Unity, and started playing around.
Let me give you a little background on me for context.. I started programming in the late 1970s as a kid. I had my first game published in 1983 when I was 16 years old. I was part of the whole “birth of the UK games industry” thing. I’ve worked in the UK and the US for some of the biggest media companies in the World. And I’ve worked on more than 50 commercially published games. In all that time, on all those projects, I’ve written code. Pure, unadulterated code. Be it assembly, BASIC, C/++ or C# or whatever, it’s always been me, a text editor and a compiler. And I’ll admit it, I was a bit of a snob about it. So you can probably imagine what I thought about a “visual game editor”. Eww. It’s not real programming, is it? It’s not proper programming like what I do. All handcrafted and stuff. Yes, my attitude was fairly narrow minded and there was a distinct whiff of grumpy old man about it all.
So with that as a lens, I fired up Unity and started exploring. I made a scene and a floor and some cubes and spheres. I made my first script and almost puked when it loaded up the built in text editor. So I installed Microsoft Visual Studio tools for Unity, and immediately felt much better. I created and attached my first script, to move the sphere around in a circle. It worked.
And it just clicked.
It all seemed so simple to me. Everything is a GameObject and you just hang components and widgets and scripts off it to make it do different stuff. You want a car, add some physics components, a script, and some visuals, and you have a car. You want a fireball, add some colliders and particle effects. All GameObjects have the same built in methods (Awake, Start, Update, FixedUpdate, etc.), and they are all called and updated (semi) predictably (lol). The whole thing was just, well.. easy. My prior prejudice and snobbery was vaporized in that moment. I could see a clear and comfortable workflow; I can create any kind of object imaginable and drive it with code that I can write in my favorite IDE (Visual Studio). Mind. Blown.
I come from a low-level, console background. I spent many years doing the dirtiest, lowest level, grungy coding you can imagine. Working on engines and renderers and porting stuff from one platform to another. All of it was hard and challenging, and I hated it. Yeah, there, I said it. I’ve always been a gameplay kind of guy. I like to make pretty stuff move around on screen. I like to write managers and systems. And this is why Unity clicked. It removed all of that low-level bullshit I hate dealing with, and gave me a powerful-enough, easy, object oriented game engine to play with. I could just concentrate on making the game.
The whole question of stability and how the Unity tech and tools had improved and matured, was answered and proven over the next few months, as I dug in and got our initial prototype out. Unity was a joy. A revelation. To a tired, miserable old programmer like myself, it was a Godsend. I spent hardly any time fighting technical issues and I just tore through the work, and managed to get a lot going, very quickly.
So, my experience with Unity has been very positive so far. I suspended my cynicism and my snobbery and really tried to embraced it. I’ve literally had no significant, unsolvable problems so far, and when I have had gnarly issues, they’ve always ended up being my own stupid fault. I’ve really not fought with the tech. I know a lot of devs like to wrangle and tame Unity and write their own layers and wrappers on top of it. I don’t really get that personally, because it works pretty well out the box. Well enough for most applications at least. I made a point of doing everything “the Unity way”, and I think that’s paid off.
Or I just got lucky..
..Or it’s all going to come crashing down around me in a fiery, burning mess right at the end..
..Oh shit, I hope not.