I have been using Unity since 2008 version 2 before the Unity iPhone even and I have to agree. It is a mess.

There has never been a time in Unity where systems aren't changing.

APIs should be simple facades to ugly systems underneath, abstracting away the pain, but Unity puts it right in your face. Their editor is pushed over code first solutions.

I thought when they went subscription that it would calm down, as before that it was a mad rush to justify you upgrading to the next version. It has only gotten worse. From the dual particle systems (which Shuriken wasn't even code accessible for a time), killing off simple legacy animation APIs, the UI years and years of delay and still not really as good as NGUI in terms of simplicity and mobile performance, the multiplayer systems have never been great they should have just kept RakNet/enet based reliable UDP and been done with it only Photon is worth it, the bulky editor first solutions that really should be code first and then editors that use that and on and on.

Compare that with Unreal that is wonderful in terms of networking/replication, solid platform that is C++ first, decent platform support, Unity has more but lots of issues.

Unity is what we develop most games on but Unreal starting to become more regular. Unity is caught in a pickle. Unreal is winning high end, Unity wants to be them, but they are leaving their smaller developers that do mobile/2D/simple 3D and making everything overly complex, while Godot is out there taking that space. I'd be worried if I was Unity. They still win on platforms available and they are making good efforts, but right now, and many times in Unity's history, there are so many systems now that it isn't simple for the low end, and high end you'd be amiss to not go with Unreal. This is coming from a Unity developer since 2008 Unity 2, before they even had Unity iPhone, back when it was just WebPlayer (which I miss the simplicity) and Desktop.

Unreal is doing high end much better than Unity [1] and Unity is losing what made it hit huge, mobile, web and desktop games and simplicity. At this point Unreal is more simple because the systems work and there aren't these one direction only changes or dual system problems. So much of the Unity API is in flux right now and you never know if they are going to drop them. UI was worked on for YEARS and now they are doing UIComponents and don't even try trusting a Unity networking solution.

Back in 2013 Unity was going to go C++ [2] and I wish they had, it was when Apple forced AOT on everyone and they backed off but Unity went into IL2CPP just a year or so before Mono was bought by Microsoft and had AOT baked in. They spent so much time not wanting to pay Mono's license but later it was all moot and not needed fully. Since that time Unity has been a constantly changing beast, and not for the better, painful wholesale updates with little or no benefit, only to see that system disappear soon and on to the next.

Unity needs to calm down, lock down API signatures/facades, focus on atomic operations, make simple APIs as abstractions and change the underlying systems when it evolves. They do parallel changes which is good, but the surface changes quite a bit. Unity has become one big leaky abstraction. I have used it almost everyday since 2008 and it would be fine if they made things more simple, but even the transition is painful. Like when they removed their legacy particle system (which had a decent API) and one day just pulled it from a new build, every old game just crashed on open, no warning. They are getting better at that but it should not be like that.

I am in the middle of a bunch of NGUI to UnityUI upgrades and that is already going to be replaced with UIComponents ... UI constructs (types, textures, fonts) really don't change that much and they spent years on that UI update. Why are users having to concern themselves with surface changes?

A major difference between Unity and Unreal is Unity doesn't build games on their engine, Unreal does. While that sometimes makes Unreal solutions more FPS/BR format and closer to their games, it makes for a solid engine.

Another difference is leadership, Unity was extremely simple and small before, once they got John Riccitiello it become a management/business focused company over engineering leaders in terms of power and direction.

Unreal has Tim Sweeney, and old school guy that understands how to make a game engine and has done it over and over. They learned alot from Unity, and are now doing it better than them once they turned towards simplicity over complexity.

When Unreal 4 swapped out UnrealScript for C++ it went into overdrive in terms of performance and clean. Unity is nice that it is C# as well, but the extra weight of constant changing systems that seem half done and not code first is tiresome.

I love Unity, I make a large part of my living from it, I hate to see them not understand that breaking changes constantly, gets a bit old and it essentially offloads technical debt to every user of the system. I am using Unreal more because of some of these issues.

People use a market engine to offload the engine team. That engine team should do whatever it takes to make transitions easy, and when difficult there needs to be immense benefits. Some of those are questionable in recent years. The desire for Unity to want to be Unreal is losing the mobile side and web is essentially not even a focus anymore which is more the whole market not Unity's fault. Unity started really as a better Flash, now they want to be Unreal. Right now Unreal is winning that and the Unreal 4 rewrite with C++ backed is really clean. Unity still more simple but with the new DOTS/Rendering Pipelines it is not.

Unity, let the engineers/product people lead over the managers, you are losing a good thing.

[1] https://www.youtube.com/watch?v=oDQl9gw_fRM

[2] https://blogs.unity3d.com/2010/07/02/unity-and-ios-4-0-updat...