Unity and Unreal Engine dominate the marketplace for people getting started in game and VR development. So the perennial question is which one should I learn? Having spent some time in both, I will share my views.
I am by no means a professional game developer. After over a year learning Unity and making some small 3D/AR/VR experiences in it, I mentored a group of college students in a studio course on it. Seeing their struggles with it, I spent a couple of months learning Unreal and making one 3D experience it.
The short version is that in my opinion (as of fall 2019) Unreal is better overall as a more focused and higher quality product but Unity is probably the best place to start given its deep and broad support for new users–but with serious qualifications.
Unity’s biggest strength is the breadth of support for new and varied users. There are a vast array of online tutorials for Unity (although most of them are now out of date). The official tutorials and sample projects form a large collection and recently have been greatly enhanced with beginner material for users as young as middle school. Unity supports 2D games which Unreal really doesn’t and I have found that many newbies want to start in 2D. Unreal has a limited selection of high quality official tutorials for new users.
The interfaces have some surface similarity but are quite different beyond first impressions. By comparison Unreal is simple, logical, and uncluttered. Once you have familiarized yourself with it, things are were you expect them to be and many features you have to set up in Unity just work out of the box in Unreal (such as editing in VR). Unreal content looks much better out of the box without the need to wade into tweaking advanced shaders and HDR pipelines. Unity has many, many windows, menus and layers and they keep changing with new versions or with new assets that bring their own menu additions with them. A big part of the learning struggle with Unity is discovering which feature is accessed through which menu. Frankly it’s a big cluttered mess compared to Unreal.
The two take different approaches to scripting. Unity is more conventional with text scripts done in C#. Visual Studio is now the primary IDE for editing scripts. This makes grabbing and sharing code with other people extremely easy. Unreal starts you off in visual scripting with Blueprints. Unreal expects professional teams to prototype in Blueprints and then tweak in C++ but here I am just focusing on learners and hobbyists. I am not a particular fan of visual scripting approaches but they do work better for some people. Blueprints offer a visualization of script logic flow which is much more helpful for debugging that warnings in a text console. But Blueprints are very hard to share and you are lucky if someone posted a screen capture of their Blueprint when looking for help online. I have found that I could get my own scripts working faster in Blueprints/Unreal but had substantially less recourse for outside help if I could not solve my own problems.
There is a huge difference in access to assets for a project. The Unity Asset Store is vast and has a large collection of free and low cost assets. as well as high quality and expensive ones However many of these are constantly going obsolete since Unity is pretty ruthless about breaking old content with new versions of the software. For example, I was bedeviled by a simple collection of “free rocks” trying to keep a Unity project alive through several minor version upgrades (which are frequent). Coming from the Unity Asset Store the content in Unreal Marketplace initially seems shockingly small and expensive. However the free collections are very high quality, very complete, and they just work when you drop them into you project (in my very limited experience with Unreal). Unreal also makes a selection of paid asset free each month so it is possible to amass quite a library over time without spending much.
Overall, Unreal is a more focused and higher quality product for creating basic 3D & VR work. It even has autosave (which Unity doesn’t) and I have yet to have it crash (which Unity does). Pause to think about that–no autosave and random crashes. Yes you can lose a lot of work if you are not careful in Unity.
If you know you want to develop something similar to what you see in the Unreal Marketplace (i.e. realistic looking 3D & VR content) then go for Unreal and save yourself a lot of chaos by trying to learn Unity. Yet for the newbie who just wants to explore the greatest range of options Unity is much more broadly supported (if more unevenly) and can produce a wider variety of content. Just manually save your work frequently and realize you will be led down a lot of dead-ends.
At this point I could go either way in future personal projects and teaching. For teaching beginners I would probably go with Unity mostly due to their new beginner content & projects.