For the past few years I’ve been developing my own game engine… sort of. Back when I started making iOS games in 2010 there was a Apple demo called Texture2D. This demo became the basis of the engine for my first game Big Bad Sudoku Book. Coincidentally I believe this was also the basis of the Cocos-2d engine (and probably thousands of iOS games). I learned OpenGL ES 1 from that demo and by reading a lot of Jeff LaMarche‘s stuff. About a year or two later I decided to start learning OpenGL ES 2, this time by reading Diney Bofmin‘s blog. As I wrote my testing and demo apps I started settling in to a group of methods and classes to standardize my apps. But here was the problem: I’m a solo indie developer. Writing a real engine is a big task all on it’s own. And any time I spent working on my psudo-engine was time I wasn’t spending working on my games. So at the first of the year (2015) I decided to give Unity another try. My goal was to add platform support but to also reduce the time I’m spending writing engine type stuff. I spent a few months learning and converting Sudoku Book (v4) over to it. But then the Unreal Engine got some publicity, sounded cheaper, and I had to look at it seriously as well.
When I googled “Unity vs Unreal” all I found was sales rhetoric. There are a lot of things to consider that none of these PR pieces were covering. So I’ll do my best here to cover this decision from my perspective and based on my development needs. Hopefully it’ll help you as well.
Two other side notes. First is that this post really should be called “Unity 5 vs Unreal Engine vs OpenGL for mobile games”, but that was too long. I will actually be comparing all 3 since for me using my own engine is also a decent option.
Second is that I want to disclose my experience level with each system. I’ve been working with OpenGL ES 2 for about 2 1/2 years. I’ve written a ton of shaders in GLSL. I actually started Big Bad Sudoku Book version 4 in that engine, worked on that about 2 months, and had soft shadows rendering on a few key objects. Then I’ve spent about about 2 months so far learning Unity (v4) and porting BBSBv4 over to it. I went right for the jugular and did complex things like writing my own custom text/font methods. In Unreal I’ve only spent about a week. I haven’t tried porting any code over there yet. I just played with the environment and did some render experiments on the iPhone. Trying to see if it was going to be a viable option for me. I also haven’t spent much time in Unity 5 yet. I’m actually diving in to that this week.
Platform Support Comparison
One of the main reasons I switched from using my own engine to using Unity was the ability to deploy to many different platforms. My OpenGL apps are written in Objective-C and C and porting them is a whole other feat. I had played around with Apportable and had some reasonable success getting my apps to cross compile and run on an Android device. But that’s still only one other platform. And Appportable started moving in a weird direction where they are only going to support Cocos2D apps (a big mistake in my opinion).
The Unreal Engine FAQ says “Unreal Engine 4 enables all developers to deploy projects to Windows PC, Mac OS X, iOS, Android, VR (supporting Oculus Rift and Gear VR now, as well as others coming soon), Linux, SteamOS, and HTML5. You can run the Unreal Editor on both Windows and OS X. Xbox One and PS4 console support is available at no additional cost to developers who are registered developers for the respective platform.”
Unity is the clear winner here and deploys to the broadest range of platforms. It’s a little harder to find a complete (non iconized) list on their site, and they sort of cheat by including extra nonsense icons here and there. But it looks like: Mobile (Android, iOS, Windows Phone and BlackBerry), Desktop (PC, Mac and Linux), WebGL and a Unity Plugin for web (which might be the same thing), Consoles (PS4, PS3, Xbox One, XBox 360, PlayStation Mobile, PlayStation Vita and Wii U), and VR (sort of irrelevant to me).
In practice many of those platforms are irrelevant. I don’t care about VR or many of the consoles. Although I did get accepted into the Wii U program and that would have to be done on Unity. But for mobile development Unreal is missing Windows Phone and BlackBerry. And especially for my sudoku game I’d like to be able to deploy to those platforms. And you have to consider the cost of the lost revenue to the missing platforms. In the deployable platforms category, Unity Wins.
But there is another consideration for platform and that’s how they handle the subdivisions (device fragmentation) of each platform. For iOS alone there are huge differences in capabilities between the different devices that are still in use by millions of potential customers. For example I have an OpenGL demo app that renders soft shadows that can get 60fps on an iPhone 6 but gets only 4fps on an iPhone 4S. Either the engine or the app has to recognize the device capabilities and make render complexity decisions to account for them. In my OpenGL engine I had an easy way to chose different shaders or texture sizes depending on device capabilities. Will the professional engine do this for me or do I need to write this in myself?
In the 2 months I worked with Unity so far (albeit version 4) I didn’t see a built in way to handle this. But in the one week that I spent messing around with Unreal I found “Device Profiles” which is a way to tune capabilities for different device classes on different platforms:
In each of those device profiles you can set limits for all kinds of (undocumented) things. At first glance this seems like a great solution. And if you’re planning to only use stock shaders and features built in to the engine it probably is great. But for me it comes with a lot of problems and limitations. I’ll have to get to those in a min. Still, it’s important to note that in Unity I haven’t found anything like this – at least not yet. I can’t really point to a winner in this category yet. I like the Device Profiles idea but there are reasons why Unreal’s implementation doesn’t work for me. No Winner Yet.
A lot of sites out there have this part wrong. They’re just repeating the sales talking points and not considering the reality of what it’s going to cost. Also, there’s really no way to fully discuss this without disclosing some info about my financial success (or lack of) in mobile apps. And I’m ok with that – but for now I’ll still be a little vague about it. (Other later posts I’ll probably get more specific about results.)
Unity3D and Unreal are both essentially FREE for smaller companies who aren’t making a profit. But at least for me, making a profit is sort of a requirement. So it has to be considered.
Unity says that you can use the “personal” edition for free as long as your company is making less than 100k$ a year USD. After that you have to upgrade to the professional version and spend $75 per seat. For an solo indie I only have one seat, so that’s just $75 right? Nope. Not if you’re doing mobile. To develop for mobile you also have to pay a $75 monthly fee (per seat) for iOS and another $75 monthly fee for Android. That adds up to $225 a month – per seat. Also.. these fee’s are based on a one year contract. So the moment you commit to that $225 a month you’ll be paying it for at least a year. Note that there might be a way to reduce it down to $75 a month if you decided to quit but that part is a little unclear to me at this point. And second note is that I haven’t investigated the actual cost for a 2-man team or more. There might be a cost break.
The Unreal Engine has no upfront cost but charges a 5% royalty per quarter on gross revenue after the first $3,000. And in their agreement they specifically point out the example that you will owe the 5% on the 100% not on the 70% you got after apple takes their 30%. So this might seem a little hard to understand, but it’s really not. I’ve seen people ask “what if I make money from Ads?” or “do I have to pay if..” It’s really simple. Each quarter if you made more than 3,000 from any revenue source for any app (combined) that you produced using their engine, you take the amount you made, subtract the 3000 base and then multiply by .05. Yes this is going to include ads that are in those apps, in app purchases, etc.
Just since I mentioned it above, the final cost I want to include is an iOS OpenGL app covered to Android using Apportable. Last I checked Apportable was $100 a month flat for the software. And you are not under a term contract. So you can pay for a few months (I did) and then stop. I cancelled mine when I decided to switch to Unity.
So let’s compare apples to apples – Unity to Unreal. There are a couple of broad differences here that might or might not be a big deal. For example, with Unity you have to upgrade and pay if your entire company makes more than 100k – mine won’t this year. But for Unreal they’re only looking at how much you make with the apps that you used their engine to make. In fact, with Unreal I would split out the ad revenue that the current version of my app is bringing in (cause it wasn’t made with UDK) and only report the ad revenue that was made inside the new version. Because not everyone would upgrade to the new version of the app. Another big difference is that with Unity (I believe) you’re paying per development seat, where with Unreal the seats are free and you’re paying a royalty. My preference here would be to pay the royalty. The last big difference is that for Unity you’re paying during development, where with Unreal you’re only paying after the app is out. Depending on how long the dev cycle is it could be an additional 3 to 6 months of payments for Unity than Unreal.
Where is the break even point where the two licenses cost the same amount? Let’s assume for a minute that like me you’re going to go Pro whether you make 100k a year or not, and that you only have one seat. And also to make the math simple we’ll forget about the development time. For a mobile developer Unity is $225 a month. Since Unreal charges by the quarter, we compare Unity at $675 per quarter. For an Unreal quarterly royalty to reach $675 you’d have to pay a 5% royalty on 13,500$. The first 3000$ is free so you would have made 16,500$, or 5,500$ a month. You have to make 5,500$ a month with Unreal before you’re paying the same as Unity. That’s $66,000 per year in revenue by the way.
Figuring it the other way, if you’re NOT going pro until you reach 100k a year (revenue or funding), how much would Unreal cost at 100k revenue a year. Well that’s 25k per quarter (8,333$ a month). Subtract your first free 3k of revenue (per quarter) and you’re paying a 5% royalty on 22k. That’s 1,100$ fee per quarter or 425$ more per quarter. $1,700 more per year.
One last consideration is a Unity subscription vs a paid license. On that one the paid license (for mobile) is $4500. It takes 20 months of the $225 subscription to match the perpetual license.
So in this category, for me, Unreal Wins. I’d personally rather pay the quarterly royalty than a flat monthly rate. And I’d rather not have to start paying for the dev system until after my app is out and bringing in revenue.
Development Environment Comparison
I’m developing on an iMac. I can’t speak to windows as your IDE. So this might not apply to you. But I actually really like Xcode. I might be in the minority there, but IMHO Xcode is a really good IDE. The autocomplete works well. I like how you can click on parens and brackets and it’ll highlight the opposite end. If I could I would just code in Xcode.
Well, in Unity you’re code/scripting is C#. In Unreal you’re code is in C++. From a coding language standpoint either is fine with me. I’m more familiar with standard C than C# and at least for now on my ramp up I’m constantly looking up syntax. But in the end it’s all just a month or two away from being second hand. I would say from a language standpoint if given the choice I’d rather use C++, but admittedly I’m a C coder. (See my bio about time travel). So for that sub-category Unreal Wins.
Xcode doesn’t do C# but it does do C++. So Unreal actually does (or can) use Xcode as the IDE. And I LOVE that about it. In Unity on the mac you’ll be using MonoDevelop. Using MonoDevelop is like using a port of a windows app on the mac. I spent the first month cussing about it and trying to figure out how to force it to use Xcode. It can’t be done. And it’s just not a friendly environment. It’s clunky. I don’t like it. I finally figured out how to tweak some of the indenting settings to work more like Xcode. But I’ll never get over not being able to double click on a paren or bracket. I’ll probably curse about it on a daily basis. So for the sub category of the coding IDE, Unreal Wins!
How about the rest of the development environment? Well here it’s probably not fair. I’ve only spent a week or so with Unreal and most of that time I was trying and failing to get a demo app to compile and load on my iPhone. Compare that to Unity where on one hand the demo app is a little too large and overwhelming for newbs, but on the other hand it’s a very playable game and I had it running on my phone in minutes. Maybe it’s the really good Unity getting started course I took on Udemy. But in this category Unity Wins. I’m sure that if I spent a day with a Unreal expert showing me the ropes it would even the scale a little. But for now Unity is the winner here.
One other thing that I noticed. It appears to me that Unity compiles code to make an app, and the engine is part of that app. And it appears that Unreal uses a standard engine and compiles your levels and loads them into something more like a level viewer/player. What makes me think this is that when I was trying to get Unreal to compile on the phone it loaded something on my phone that appeared to be missing a payload with a message that said “Failed to connect to file server”. Does it matter? Maybe. I don’t like something about it. But I also don’t know but what maybe both of them work like that. It just seems like the larger Unity demo app loads a lot faster than the Unreal table and chairs demo app.
I’m a shader guy. I like writing my own shaders. I like encoding weird stuff into images and using a custom shader to pull out the data and get a specific look. The problem is that writing a custom shader on a cross platform game is a little complicated. Not all devices are going to be using the same graphics card architecture, not to mention that huge differences in gfx capabilities. In this category my own OpenGL apps would be the clear winner. But those shaders are ES 2.0, they’re not very cross platform compatible.
Unreal offers the source code for the entire UDK so you can play around and customize things. From what I can tell if you want to change a shader you have to go clear back to the UDK source code. That’s deep man. I just want to tweak a shader, not dig in to code that’s being maintained by a whole team of people. The entire point of switching to Unity (or Unreal) from using my own psudo-engine was that I don’t have time to work on the engine. So UDK’s open source code thing is irrelevant to me as a solo indie developer. I just don’t have time for that. And for my apps being able to write shaders is non-negotiable.
Unity on the other hand has a Shader Language thing that makes it very simple to tweak or replace a shader. In the two weeks in there I’ve already written a couple. But still, it’s a royal pain in the ass. This week as I dive back in to development (I took a month off to work on a video project) I’m already dreading how much hair I’ll lose messing with shaders.
So in the custom shader category Unity Wins, but it’s not a towering victory. It’s been a huge time waster so far but it’s a necessity to get my apps ported.
Support and Community Comparison
I had two distinctly different experiences with Unity and Ureal. I’ll have to tell two quick stories:
First my experience with Unity. I posted a reasonable question to their Unity Answers page. It’s similar to a Stack Overflow. Unfortunately as a newb I had no points in their system which meant that my question had to be approved by a moderator. At the same time I posted the same question to the Game Dev Stack Exchange. My question on Unity Answers sat in moderation, unable to get any eyes, for quite a while. Meanwhile within 30 minutes my question on SE was answered by someone with a nice demeanor. Then at some point later I checked on my question on Unity Answers. It had been removed by the moderator with no explanation, no reason, no communication of any kind. The moderator wasn’t a Unity employee but was someone in the community who just didn’t like my question for some unknown reason. I eventually found a forum thread about how the moderators were planning to be harsher on newb questions and posted my disgust. Basically the response was that every reasonable question had already been asked. It was a horrible support experience. You could say “to be fair Answers is maintained by the unity community” but that doesn’t change my experience. The company should have a handle on things enough to prevent that sort of experience.
Now my experience with Unreal. Right away I tried to compile the table and chairs demo and for some reason my install just wouldn’t do it. (See image above). I posted a question on their Answers area and an Epic employee answered asking for a log file. That day and after business hours I went back and forth with this employee sending logs, him sending me test builds, and me sending him log files. By the end of that evening we had the bug fixed and the app was loading on my iPhone. This was an excellent customer support experience. I felt like the employee went above and beyond to help me out in what had to be after his business hours.
From these two opposite experiences I have to say that Unreal is the clear Winner here. In the two months working with Unity I just found the community to be closed off. They say it’s because they get so many newbs asking dumb questions. And maybe Unreal is heading for that same volume of “dumb questions” now that it’s free to use. But surely there’s a way to handle that without making a professional customer like me feel jilted.
Slash Screen Comparison
When I get a chance I’ll add this section on the splash screen and post some images. I didn’t have time to add that and wanted to get this post out. I will say that for me I can’t accept not having control over my splash screen. And for that reason I will have to use the Pro version of Unity.
Let’s see… Unity wins Platform Support, and Shader Customization and part of the Development Environment comparison. Unreal wins the Cost Comparison, the coding IDE and the Support Comparison. You’d think that Unreal might be the winner. But here’s the thing: Not all categories hold the same weight for me. For my apps the Shader thing is critical, and I really want to deploy to Windows Phones. I wish that Unity’s cost wasn’t so high. I would rather pay the royalty than the flat up front rate. And I wish I could do my Unity coding in Xcode. But for now I’m sticking with Unity. The cost is a factor but since my app should hit the break even point I’d have to pay the fee either way. So it can’t be a deciding factor.
Also Unity 5 does now allow me to do everything I need to do in the personal edition (render to shaders is key for me). So I can at least wait to switch to Pro until my app is almost complete. And that will save some development cost.
And I can admit that the time I already spent starting my app port is also a factor. Maybe had I started with Unreal in January I’d be choosing it now as well. But I don’t have time to re-do that learning curve and that work. And despite all the things I dislike about Unity, I really like the results I’m getting. And in the end that’s going to be more important than whether or not I get to code in Xcode.