Programmer Perspective: Switching from Unity to Unreal Engine 4

Hello, Marty here. I’m on the programming team for DreamSail Games. In August 2016 we launched our first commercial project Blade Ballet which we built in Unity. We’re pretty proud of Blade Ballet and how far its come, but we think we can be pushing games harder and further. Our next project is a VR project. We spent a month getting our feet wet with developing some small VR prototypes and deciding between Unity 5 and Unreal Engine 4 to use for our next project, followed by 4 more months of prototyping in UE4. Here are the differences I've found.

Pros and Cons of Unreal Engine against Unity

Unreal - Pros

  • Blueprints allow very quick prototyping and are straightforward for artists and designers. In Unity we would have to have a programmer assist with basic tasks.

  • Blueprints are vastly superior to prefabs. Blueprints has its own editor vs dragging the prefab into scene and editing it then applying changes.

  • Baking lighting is significantly faster in Unreal Engine.

  • Built-in material editors: we used Shader Forge in Unity which isn’t necessarily a bad thing but relying on plugins can be tricky against native systems.

  • Dedicated particle system editor. Has way more options than the built-in Unity stuff. Again, solvable through plugins but not an ideal solution.

  • Better asset management. Lots of assets have more import options and settings.

  • Built-in networking. Really strong compared to some plugin options.

  • Built-in level streaming. Again, we don’t have to develop our own options for this or resort to plugins.

  • Overall a lot more built-in systems that you’d have to find through plugins in Unity

Unreal - Cons

  • The absolute biggest and probably most compelling reason not to switch: documentation is severely lacking. If you’re trying to figure out something complex, google it and you’ll get 2 forum threads asking "how do I do this?" with no responses. Even their scripting and BP node references are bare bones - you'll get the inputs and outputs of a function but they don't explain what the function does. Much of our process can rely on a "Let’s see if it does anything!" mentality.

  • If you’re building a C++ project, compiling is longer than Unity’s smart compile. Building the engine from source if you want to edit some things is almost 35+ minutes for just the base project.

  • If a feature doesn’t function quite the way you want, or you need something else out of it, usually the only answer is rebuild the engine from source and edit the code. (There are usually plenty of ways around this in Unity.)

  • Strange gotcha's: for example, if you’re not using the correct macro, or if something goes wrong in a constructor, the entire engine crashes and you can’t reopen the project.

  • No VR scene view/editing while playing from editor.

  • Engine crashes regularly.

  • UMG is very unwieldy compared to Unity’s Canvas and it's very difficult to use UMG with C++.

  • Poor source control support. Have to reload project every time you switch and some plugin binaries get real messed due to strange folder hierarchies. Although we haven’t tried to use the built in Perforce settings. We’re using Sourcetree and git as our source control.

Overall, it’s a lot tougher to go through Unreal starting out. Most of the stuff is getting into it and figuring out the quirks. However there are a ton of cool tools that are just built into the engine which let us do some things with almost no effort.

Unity - Pros

  • Unity’s component style scripting system really lets you work in the style you want or in whatever way you’re most comfortable. If you can visualize it, there’s most likely a way to work it into Unity.

  • Plugins have a fairly wide reach into the functionality you’re looking for. Can be a good and bad thing, but if you’re looking to do something a bit special there’s usually a plugin for it.

  • It is easier to do simple tasks in code than Unreal. Trying to find references to certain objects in C++ is somewhat roundabout depending on what you’re doing. Things like tweening values or moving simple objects.

  • Lightweight engine with fast build times. Unreal can take up to 30+ gigs. Unity being almost ⅓ that.

  • Very active community and support. If you’re trying to do something, there's a VERY good chance someone else has already tried it and posted about it on the internet.

Unity - Cons

  • Extremely programmer-centric. If you want to do anything you have to have a programmer look at it first. It’s up to the programmer to create tools. This isn’t a fault, it’s a standard, but if a designer wants to prototype something or if an artist wants to try something on their own it’s extremely hard. Basically anyone who’s not a programmer needs to have someone hold their hand. You can make inspector values and what not, but from my experience designers and artists tend to ignore/forget how to use them.

  • Prefabs are awful. The process of editing them by pulling them into scene and remembering to apply changes is unwieldy. No nesting prefabs.

  • Nav mesh stuff isn’t as robust as Unreals. It tends to break or have strange pathings.

So why did we end up switching over? We were looking to empower our art team to have a greater impact on our development. In our last project our artists felt very limited in what kind of control they had over the engine. Most of our tasks, even simple ones, had a “have a programmer take a look” attached to it. There’s definitely things we could’ve done (i.e. programmers make more robust tools, artists become more friendly with code etc.) but the line in Unity between "this is an art thing" or "this is a programmer thing" is incredibly blurry. Our art team wasn’t always sure what effects their changes would have on the code. For example, changing some particle effects on a skin may misalign it when it’s spawned due to our having rotation/scaling rules for different bots. Ultimately, Unreal was a tool that allowed them to exert a whole lot more control over their work. Unreal makes the process a whole lot more non-programmer friendly. More visual interfaces, blueprints are simplified programming logic, and much more robust support for things like particle systems and editing import asset settings.

So at this point we’ve spent about 5 months in Unreal and it’s been tough on the programming side. It’s a lot different from just learning a new programming language, it’s almost like learning programming all over again. There are so many things that I have to retranslate from Unity, or read the documentation and take a stab in the dark of what something does. The biggest thing I’ve found is that Unity was extremely free form - if that makes sense. You could develop a feature 100 different ways and end up more or less the same. A large part of it was how the programmer functioned and enjoyed programming. Unreal seems to have a very distinct pipeline. A lot of these tools were developed for an existing dev team already in motion. So most of the tools feel like they were catered to Epic’s needs, uses, and how they operate. As the differences aren’t absurd however, we’ve been adjusting well and are starting to get back up to the speed we were working in Unity. Also, from what I’ve heard from our artists they have way more options when it comes to exploring.

I think it’s still going to take some more ramp up time, but we’ve already seen our team make some really cool stuff in Unreal. As we move forward and learn more and more about the engine and its quirks we’re only going to start pushing cooler and more amazing stuff.

Thanks for reading

-Marty