I confess, I have been a terrible person and a liar. I have hardly touched my game since I started at the new job though I think I had a fairly decent reason, and I will be getting back to it once I'm feeling less insecure. However, this summer I got really deep into a draft of this very post, and I couldn't bring myself to let all of that ink go to waste. Due to the speed at which high tech moves I cannot promise that all of these things haven't been fixed and I am whistling dixie and I'd be happy to receive a politely worded email expressing exactly why I am an idiot should that be the case.
When I first decided to take a game building sabbatical the first choice I hit upon was 'should I also make the engine'? I am slightly notorious for this sort of wheel remaking, but did the adult thing and decided that the game engine sphere is decently mature at this point. Something out there was going to completely fit all my needs, I uncharacteristically optimistically decided. Also, I suspected I could probably get away with avoiding some of the dreaded math if I used an existing engine. The plan was a 3D game, god only knows the depths of linear algebra I would be expected to plumb to roll my own engine.
The two frontrunners in the space in mid 2015 were Unreal Engine and Unity3D. Searching for a comparison between them leads of an internet holy war of near vim vs. emacs proportions. I think it's helpful for context to outline what I was looking for in an engine -- one, I wanted some sort of modern level editor to avoid dicking around with programmatic level building, and two, I wanted it to be developer friendly -- no RPGMaker type drag and drop type shenanigans. Before I get called out as an elitist developer jerkwad I want to point out that I eventually wanted the project to serve as a portfolio piece, which would need at least some code to show up eventually (solving hard problems would be a bonus, but that was on me and not the engine). Literally the day I gave notice at my old job, Unreal Engine went free to use and to me that seemed enough like fate to give it a go, plus, C++ my programming white whale had surfaced yet again, and I wasn't going to let it get away.
About three months later it occurred to me that if you're actively avoiding working on your own fun sabbatical game project maybe it was time to reevaluate what you were doing with your life. I realized after a Canada Day of agonizing over the issue an engine switch would be something to take a run at if I was going to make any more steps forward. I managed to go further in a week in Unity than in the preceding three months in Unreal. Calling it an uncomfortable realization was an understatement, all that time felt so wasted, and I even asked myself if it was worth continuing, but this was a game that I wanted to make, and a story that I wanted to tell. Plus, as we say at my job it was a good week for learning, or in this case three month period.
So, let's talk about the issues that lead to this u-turn (haha, that wasn't even on purpose).
First of all, due to its age, the documentation surrounding Unreal is sprawling, and in many places absolutely hopelessly out of date. An early milestone in the project involved creating an item examining system similar to Gone Home and Skyrim, where a player is able to zoom in on a 3D physics object and drag it around to rotate and look at all the sides. There were some anticipated challenges, and the Unreal Answer board seemed either dubious at its possibility or happy to tell other posters the effect looked crappy anyways, such is the way of the internet. Undeterred, I hypothesized that it might be possible to do using a HUD element -- I wasn't sure, but that at least seemed like a place to start. Finding the 'best' way to even build out a basic HUD quickly became a strain, as I could find no fewer than three ways to make a HUD, one (Slate) so hopelessly outdated the documents may as well have straight up said 'warning, here be dragons', one so new nothing of note had yet been written on it, and finally one in Blueprint.
Ah Blueprint, how do I hate thee, let me count the ways.
For the uninitiated, Blueprint is Unreal Engine's proprietary visual scripting language which is an extremely fancy way of saying "drag boxes around and connect them with strings instead of coding like a normal human being". The marketing copy proudly states that you can write an entire game in Blueprint and I believe it. I just don't know why you'd want to as long as actual scripting exists, an if
statement can be a few keystrokes away, I never figured out why you'd rather click around like a lost dolphin. To be completely fair, I get that some of this is on me, most programmers treat touching the mouse as some sort of sign of weakness and I'm not immune to that, at the time my desire to do everything 'in the code' verged on pathological. But, I do think I have a few valid criticisms Blueprint snippets are awkward to share and usually involve gigantic screen caps, and can be difficult to explain without a video. Importantly to me, it's a non-transferrable skill if you ever leave Unreal something this blog post sets out to prove is not impossible.
I would be cool to leave Blueprint alone, I didn't want to write that extremely condescending and self-important rant there, that's not really me. But Blueprint flat out refuses to leave me alone, and has in many ways become the glue that holds a lot of Unreal development together. I tried to avoid it (perhaps obviously based on the above) but in the documents I could find all roads lead to Blueprint eventually. Which might be awesome for you if you're trying to get a game out in a super powerful engine really quickly, or without learning to code first. It was not what I wanted, and if I was interested in using all the lovely videos, and modern documents, and community resources I was going to stop pushing against the Blueprint workflow. C++ is hard enough without solid writing on it. Converting tutorials from Blueprint to C++ was agonizing though I did manage to successfully do it at least once.
So, you're probably now wondering why I didn't just jump into the community and start shaking answers out of trees, but honestly I found the community around Unreal a bit thin on the ground -- probably due to its very recent at the time plunge into free to use. Especially compared to Unity's positively gushing community. I don't doubt that Unreal's community will have a meteoric rise, it just wasn't there when I needed it most. I've dated people like that. Still, questions going unanswered for months, or dispatched with snark or hostility didn't make it feel like the welcome mat was being rolled out. Google searches, when I could even figure out decent search terms were turning up people just as confused as I was making progress grind nearly to a halt, I'd spend days googling around the issue and not feel any closer to knowing what was going on. I get that I was a newbie, and was probably asking the most banal questions in the most eye-bleeding format possible completely unintentionally, but I was getting frustrated, and needed a change.
Amongst my people (web developers who fancy themselves game developers) Unity has a bit of a reputation. And not a great one, which probably also influenced my decision to start in Unreal. Though most game developers I know have at least some soft spot for the engine, and indeed use it. It gets derided as a toy, or something that requires too much editor fuckery, but after my adventures in Blueprint I found I was writing way more code in Unity than I had even come close to in Unreal. Unity lets you write code in either C# or Javascript, both languages I know quite well, and I went with C# because I find prototypical inheritance like chewing tinfoil. It was great because even tutorials in the wrong language could be reverse engineered with little to no effort. Suddenly I was building a game, not combing documentation for hints.
I in no way doubt if my game needed top of the line graphics capabilities, and had involved a team that could get some use out of Blueprint I would be writing a very different blog post right now. Many of the features I got used to in Unreal's level editor became sorely missed when I jumped into Unity's like subtractive primitives. Unity's 'everything is a script attached to an object' paradigm can be a bit weird at times. And, am I admitting, after more than a thousand words that maybe I was just a bit too dumb for Unreal -- sort of. But for what I wanted to do -- build a fucking game using code -- making the switch was a great idea. Next time C++. NEXT TIME.