One weekend I got the idea that it would be simple for me to write a hit video game, make tons of money, and leave my day job*. I’ve dabbled at writing games now and then since I first learned programming back in the 80s, so this is nothing new (I have yet to actually complete a game, though). Anyway, I started reading up on popular 3D game engines. From what I can gather, there are basically two choices: Unity 5 or Unreal 4.
I started with Unity, looking at tutorial videos. I liked what I saw right away. The IDE looks nice and clean, the framework is well-organized and easy to understand, code is written in C# (which I use in my day job so that’s a big plus there), the tutorials are thorough. From a developer standpoint, I don’t see how a game engine could get much better.
My biggest worry, though, is that it won’t scale well. It seems perfect for small, simple games, but what about a large, complex, multi-tiered, multi-player game? What about a full-blown MMORPG with millions of players? What about a twitch game where maximum performance is vitally important? Will all that overhead that makes the engine so simple to use eventually slow down the game’s execution? Will the developer have to spend all of his time optimizing and tweaking and even replacing things to get around the limitations of the engine? Will all the abstraction layers keep the developer from truly optimizing the game? I don’t know the answers to those questions.
There is also a somewhat disturbing amount of designer-style editing that can be done in the IDE, at least in the tutorials. I equate it to ASP.NET development. There are a lot of nice visual web designers and drag-and-drop gizmos and data binding tools in Visual Studio but I sometimes (ie. almost always) find it faster and easier to write out code by hand for large-scale projects. Dragging-and-dropping something once or twice is okay, but dragging-and-dropping things a thousand times is a nightmare of maintenance issues. I hope there are code equivalents to all of the automatic stuff that happens when you drag-and-drop things around in the IDE.
Still, it’s a pretty popular engine. I looked over a list of games that use the Unity engine and found some fairly impressive results. The Forest is a beautiful game that runs pretty well, about which I once wrote: “Whatever engine this game is using should be used for all future MMORPGs, in my humble opinion.” Guns of Icarus also looks fantastic. Sir, You Are Being Hunted is a fine game. Besiege and Kerbal Space Program don’t focus on graphics but they are really fun. Shroud of the Avatar, which I haven’t yet seen in person, looks pretty nice in screenshots and videos.
And they are all indie games. I suppose now that I’ve looked into Unity I can see why smaller and/or newer teams would want to use it. It’s got a very low barrier to entry. I can easily see brand new programmers stepping out of college right into Unity.
Next I looked at the Unreal engine. I gather that Unreal is the more “pro” option that big budget AAA studios use. I don’t know if that’s because it’s actually better or just that it’s been around longer and is more entrenched.
I ran into problems with the Unreal engine right away. The first problem is the tutorial videos. They aren’t good. They definitely assume you already have some knowledge about not just object-oriented game engines, but Unreal itself. They don’t walk you through a logical process of building a game from start to finish but rather skip around in somewhat puzzling directions. Most of them assume you have a huge library of 3D assets lying around waiting to be imported as well.
Then there is C++. That automatically gives it a much steeper learning curve than Unity. I’ve been around the programming block a few times so C++ doesn’t necessarily bother me, but it definitely gives me pause. I’m just one person, and writing C++ is time-consuming. Yes, it’s fast and efficient and exactly what you want to use to write games. But with so much of the computationally-intensive work done by the engine framework or the graphics card, it leaves mainly game logic for you to write, and there’s a lot of overhead to deal with in C++ just to write a bunch of if-then logic.
Since there is almost no chance of me actually completing a game, let alone getting it into a marketable state, I figure I should make things easy on myself and use the simple framework. That’s definitely Unity 5.
Now if only there was an easy way to make 3D models.
* My goals are always very realistic.