Skip to content

Instantly share code, notes, and snippets.

@vexe
Last active April 18, 2024 18:46
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vexe/c3d2cfe9546ab56b52ef5713efeb9d91 to your computer and use it in GitHub Desktop.
Save vexe/c3d2cfe9546ab56b52ef5713efeb9d91 to your computer and use it in GitHub Desktop.
My personal experience. Unity vs Unreal

This is intended to answer a question Casey Muratori had on twitter about why would anyone choose Unity over Unreal. The short answer is, I have no clue. Well, I kinda do know why you WOULDN'T choose it, so maybe I'll tackle it that way, pros/cons. Read on.

There's a few pros I could think for Unity:

  • Their text-based asset serialization which makes collobration work and resolving conflicts much easier. Unreal's assets are all binary and it's really built well for Perforce, if you're more than a handful of people working together not using Perforce (e.g. git) you'll have a less of an idea time.

  • Their undo/redo system I found is a lot more graceful/lightweight than Unreal's. Undoing in Unreal sometimes doesn't work reliably or go back a dozen entries in history, and just reverts back your selection state and is a bit intrusive (not sure if that was imporved in UE5)

  • Their animation editor (for me as a non-animator) I found was friendlier and easier to work with

  • The profiler is nice and very easy to use, a one stop shop for cpu/gpu/memory profiling

  • Really trying hard here to think of a 5th one here... I guess C# is easier than C++?

  • MAYBE Mobile? I haven't tried Mobile in Unreal so I can't comment on that.

  • MAYBE 2D? Again Unreal seems to have a great 2D Paper system so I can't comment either.

  • Computer specs entry requirement is lower. You really need a beast machine to run Unreal esp if you're programming. Unreal will happily devour your cores to compile shaders.

Cons, oh boy... off the top of my head:

  • Unity is a framework where people make tools and sell them on the asset store to compensate for the 'engine' missing features, and try to replace the tons of buggy, low quality, not thoroughly tested or well thought out systems.

  • The general mentality is: You need X? no problem, our engine is flexible enough to implement it yourself or buy a plugin from assetstore. Need an AI suite? no problem, just buy Behavior Tree Master on the store and you're covered. No good 2D path finding solution? No problem, just buy this 2DAStarPRO and you're good to go. No visual scripting for designers? No problem, playmaker got you covered. bug, wait a minute... what's the fucking point of using an engine then if im still having to make all that shit myself? LOL

  • They really botched the whole 'user friendly' experience years back. They had a very friendly (but slow) gameobject-component archtecture that was simple and easy to think about, but then heavily diverged when they introduced DOTS and hired people from Insomniac games (e.g. Mike Acton) to make things faster. It was a completely new archtecture, lot of people were put off by it, couldn't get documented well, kept making breaking api changes between versions, people had to rewrite their projects multiple times, people were really pissed off so they brought back support and love to gameobjcts. Ping ponging back and forth, to me it screams we don't really know what the fuck we're doing. This massive split makes it really hard for new comers to get on board in a clear path to long-term success, I can't really recommend it to someone starting out.

  • At some point around 2017 they started to pump out TONS of tools that weren't finished, full of bugs, untested as if they had zero QA, they deprecated older systems and in favor of the 'new' ones, but when people find out the new systems aren't as good or has limitations the older ones didn't, they try go back to the older systems but they're no deprecated and no longer recieve support (e.g. my next point coming). This REALLY broke developer trust. Its really hard for us to trust anything new they come up with and roll our own instead.

  • Their non-existing network solution is a big turn off. So they had this HLAPI but then they deprecated it, and left people with no choice but 3rd party, now you're staring at comparison charts of 3rd party networking solutions wondering how to shoot yourself in the foot in a way that doesn't completely dismember it. They came in 2018 with a DOTS networking tech demo, which never fucking compiles now anyways. They keep saying we're working on a network solution, we're still waiting.

  • The closed source code aspect turns off a lot of AAA, the source code license is pretty expensive.

  • C#, garbage collection, memory management is a big turn off for serious projects esp if you have to ship to console. You're constantly fighting the GC and having to do ridiculous object pooling kungfu to combat it, then you got those GC spikes in the profiler that you can't really do anything about except go to the corner and cry. You'll do MORE memory management work than you would in Unreal.

  • Unity breaks pretty hard at scale. The bigger your project is, the more assets you have, the more waiting you'll have to do it for random loading bars at every stage of the process, entering play mode, exiting play mode, loading an asset, saving an asset. The inspector/details panel becomes slow, selecting things in the scene brings down your fps to 10, etc. Recently they added a timer to these loading popups so you see how long you're waiting for things to happen, which is very demoralizing to know how much time you're wasting waiting for this fucking thing to do anything... This is how it goes at work: "Hey Ali why is my editor running so slow??" to which I reply "Do you have anything selected?"

  • Their hot reload system is hot garbage. You're forced to work very strictly with their very limited serialization system in order for your data to survive assembly reloads. Even if you roll your own DLL hot reloading solution (which I did at my work), the entire echo system around will fight against it

  • They constantly break visual studio solution file generation almost every update, which is hilarious

  • Their UI system... They actually shipped with tons of LINQ code in it. I don't even know what to say about this, except that's a very disappointing low standard for code quality.

  • Their resources management/API is a complete joke. They first had the "Resources" folder which was great, really simple and easy to use, but it would bundle everything you put in it even if it wasn't used and make the executable size large and load time slow. Then they added AssetBundles, which were great in theory but you had to manage bundles yourself and dependencies and things would get duplicated in memory because of shared references, etc... a mess. Then they came up with Addressables, which was a layer on top of asset bundles, to 'manage complexity', but it only made things more complex and is buggy as hell... Everytime something breaks at work my coworker calls me over and says "Hey Ali, come here, it's fucking Bill again", (Bill is the forum handle of the lead dev on addressables). That's how broken that shit is that literally if anything breaks its gotta be Bill lol. The concept of the system is great, but just like every other new system they come up with, the implementation is pretty bad, and its made in a vacume by people who seem to have no idea what a game actually needs in terms of resource management. The system only has async loading, no sync. Are you serious man??

  • They really need a team dedicated at Unity to test all these systems out by actually MAKING games and shipping them, not just demos. I'm pretty sure if they did that they'd rewrite the engine again lol.

  • Mobile, Android and IOS? Don't even get me started... that Services window? It's a piece of fucking shit.

On the other hand you have Unreal, which is battle tested and mature as fuck. They got fortnite running it so you know this shit is real. They have a dedicated editor (not just a floating tiny window) for every single aspect in gamedev, its all treated as first class citizen. Sound graph editor, material editor, collision editor, animation editor, built in behavior trees/AI graphs, super powerful/flexible particle systems, blueprints/visual scripting, instant playmode, native access to the code and C++ for performance, a pretty reliable (but bit limited) C++ live-coding system, list goes on. I don't really get the whole 'friendliess' thing, to me I see Unreal to be more friendly due to the amount of visual scripting systems they have. You can get pretty far with visual scripting (you'll be limited at scale of course) as a beginner. Where in Unity you actually need to learn C# to get any scripting done (talking out of the box here, vanilla no plugins)

So yeah... I don't know why would anyone choose Unity over Unreal. It's probably marketing at this point and the legacy ease-of-use reputation of the Unity 2013 or something.

@justinliew
Copy link

This generally seems accurate. The one thing I always found in Unity was "if I need to do something once, it's easy. If I ever want to turn that into a system, it tends to break down". I think part of that is not having source code, since organizing stuff into reusable pieces always felt really difficult in the Unity editor. That being said I never directly worked on anything that shipped using Unity; it was always doing gamejams at work and talking with coworkers at studios fighting to use Unity.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment