Over the last decade Unity has become the game engine of choice for a good chuck of game developers out there. This is due to many factors, the main factor being that it was designed as a product first. Where as a number of other engines where brought into existence to make a game. In my opinion this is the key difference between the two engines.
Unreal was originally developed to facilitate the creation of one the most beloved FPS of all time “Unreal Tournament”. Unreal Tournament was designed to be a fast paced shooter, with high graphical fidelity and high performance networking. These things are the key features of the Unreal engine, which is why the engine has the cons and pros that it does.
In Unity’s case it was designed to be nothing but a game engine that would not limit game developers in what they could do, and eliminate the many bottle necks in the game development life cycle. It is simply a product built to make any game, not a particular game.
The differences between the two are seen in the usability the engines. This is most prevalent in the languages that they use. Unity uses C# (aka Microsoft’s Java) whereas Unreal uses C++ or Blue Prints (Visual Scripting Language). For beginners and even intermediate programmers writing effective C++ code is very difficult. Since there is no memory abstraction layer and the syntax is not as initiative to understand. Another point of difference can also be see in the minimum computer specifications needed to effectively use the engines. Unity for the most part, does not require much, it could probably run on a potato. Whereas Unreal requires a quad core (i7 preferably), 16GB of Ram (preferably more), and good video card (preferably anything greater then a GTX 1060) .
The differences highlighted above also explains where the two engines are usually used. After a while Epic Games started to license out their engine. The licenses were very expensive, so naturally the only people that bought it were other game studios, who then made AAA games. Unity on the other hand, had a free tier and inexpensive (comparatively speaking) tier, which lead a lot of indie developers to adopt Unity. Indie developers are usually tiny teams or single developers, working on shoe string budgets. And they are usually content, if they earn enough to make another game.
The biggest difference has to be the communities around the game engines. Unity has one the largest and helpful communities out there. There are a ton of forums, blogs, books, and YouTube tutorials out there about Unity. Where as most if not all the high quality learning materials for Unreal, come directly from Unreal it’s self.
Then there is the Unity asset store, a market place that allows developers to sell anything and everything one would need to make a game, whether it be art work, scripts, or even music, the asset store has it all. The Unreal engine has something similar however it is not as robust as the Unity asset store.
In my opinion if you want to make video games, you should just use what you are comfortable with. If you are experienced in C++ looking to code games and have a few art friends to make high rez 3D models, and you want this to be a PC only game choose Unreal. If you are one person developer that has some coding experience choose Unity.