Unreal is heavily oriented towards 1st or 3rd person walking around a level. Unity begins with a blank slate for really any kind of game.
The visual scripting in Unreal is a turn off, and nobody want to work in c++. Working in C# for Unity is a real pleasure.
I have no idea about game industry as I am not there but I use C++ for business backend servers and have no problems or desire to replace it for this particular task. Modern C++ is a pleasure to work with unless one's ego can not tolerate / accept the fact that you do not need to be Alexandrescu to be productive.
Plenty of shops are more than happy to keep coding like the world has frozen since C++98.
Even if you look at Microsoft and Google sample code, or Android codebase, it is a bit debatable how much modern it actually is, and yet they are on ISO.
Every language has its own share of problems
>"Plenty of shops are more than happy to keep coding like the world has frozen since C++98"
And if they're comfy then good for them.
Plenty of stuff to report on.
But come on, blueprints really do suck. Even with all the cool debugging and watching the flow and all that stuff. The tech is amazing, but I just don't want to code like that.
They absolutely don't suck when used in the intended way. I'm not a fan of writing code in visual languages either (worse information density, slower to write the code, harder to debug) but if all you're doing is wiring up some triggers in a level? Hell yeah, it's great. Need to fire a bunch of events over time, maybe do some super simple code-drive animation? Timelines and latent actions are way easier than the textual equivalents. And extending it is dead simple which makes it easy to write something in C++ to be used from Blueprint.
It's also worth noting that Unreal's C++ has many of the niceties of C#. I won't say it's as easy to use (it isn't) or that Unreal gets rid of some of the eccentricities of the language or build system (it doesn't, and Unreal's build system - while nice - is incredibly under documented), but Unreal does provide garbage collection (and even reflection) which takes a big part of the burden of C++ away.
Unfortunately Unreal doesn't really have a middle ground - something between the complexity of C++ and the simplicity of Blueprint. There's been rumblings of a new text-based scripting language (Verse - https://twitter.com/saji8k/status/1339709691564179464) but it hasn't been officially commented on by Epic outside of a single presentation where it was shown in relation to Fortnite.
Magic Armour gives you +15 health and Orcs spawn in the Forest after the Spider Queen is defeated.
You don't want to have to go to the programmers when the behavior of magic amour changes or when Orcs have some other prerequisite.
Can't wait to hear more about this Verse.
There was a time when Unity had momentum because it was free* and the documentation was (comparatively) better than Unreal for the average user.
The learning curve for unity is arguably better for 3D and inarguably better for 2D than Unreal.
*The seat cost for unity has been low (albeit changing over time), but you could release and ship a video game without paying for anything
C# is an easier language for most. C++ (particularly UE's flavor) is more difficult.
Unity is much easier for a single person or small team. Unreal is designed in mind for teams with dedicated designers, artists, audio, engineering, animators, etc.
For a long time, Unity fought to be anything more than just 3D Flash. It wasn't taken seriously. And for good reason. About a decade ago I worked on what was at the time considered to be one of the largest Unity codebases in existence. It was rough. Unity's come a long way since then.