As many of you know I have a fair amount of experience with Unity3d, but it isn't my favorite. I'm not exactly sure what my hangups with Unity are. Maybe it's that it is too closed off with source code access costing a fortune. Maybe it's that there are a lot of crummy developers that use it. When I say "crummy" I'm referring to a lot of those freemium phone games you see. Maybe it's that the engine seems to be designed for mobile first, so a lot of the technology demos are underwhelming. Still, Unity is easy to get in to and has a huge community that turns out tons of good tutorials.
I used to have a gripe about the pricing scheme of Unity, but the latest release fixes those issues and makes the personal edition truly free. Sure any game you make is an advertisment for Unity -- since you can't change the splash screens, but that's not so bad. Unity 5 also boosts the power significantly with new shaders and lighting.
But it still pales in comparison to Unreal Engine.
I've probably spent some 40 hours in Unreal and I love it. If you're expecting to switch from Unity to Unreal overnight, you'll be out of luck. Unreal has a steep learning curve and outside of the official documentation tutorials are harder to find than Unity's. That said, the official tutorials are fantastic and in a couple of hours will have you building some very nice looking mini-games. There is also no shortage of example projects to pick apart, and believe me, you'll need them. Unreal has an unreally steep learning curve. While Unity classes all derive from MonoBehavior, Unreal classes will derive from a variety of classes -- Pawns, Actors, Characters, HUDs, etc. It's clear that the engine was built for FPS games originally and while it is certainly far beyond that now you might find yourself digging into the old FPS namescheme.
Coding in Unreal comes in two flavors -- C++ and Visual Blueprints. C++ is a compiled language, and if you've only done scripting or C# there is a lot to learn. C++ provides power and speed, but all that power makes it very easy to shoot yourself in the foot. You'll need to be aware of pointers, references, and header files -- all of which are managed for you in other languages.
Blueprints on the other hand are intended to be simple. You can build game logic by dragging and dropping bits of code and building flowcharts of behavior. Programmers have a lot of reservations about this kind of thing, but let me assure you that this is pretty low level dragging and dropping. In one of the first tutorials I did we created a material that rendered sprites with various color and alpha adjustments on the fly. This low-level access also means that Blueprints are not the "drag-and-drop your game" solution that some people thought. Regardless, of the path you take there will be learning to do.
I haven't hit the best part of Unreal yet. If you don't want to work in C++ or Blueprints you have another options. The engine supports scripting of many, many kinds through 3rd party (and 1st party, actually) plugins. You'll have to download the source code and build the engine with scripting in place though.
Which is the best part of Unreal! It is open source! I downloaded and built the engine a couple nights ago, and it is an awesome feeling to be able to watch progress on such a huge project and to contribute.
Unreal isn't completely free though. If you make over $3,000 dollars a year from something you built with Unreal you have to pay royalties as part of their "you do well, we do well" program, but that feels like a fair tradeoff.