I've been using a lot of these since I'm working on my own game projects, so here's my take.
Unity
It uses what it calls GameObjects to represent all items you see on screen. So for example any model on screen will have a GameObject, and attached to that you have components, say a mesh renderer, a physics component etc. These GameObjects unfortunately aren't very light on resources and take time to instantiate, so once you move past a certain number you run into trouble. Drawing for example 100 is ok, especially if they don't move, but 1000 is a problem...it also depends on your output device, e.g. a phone vs a PC.
Second option is to create your own meshes and attach them to GameObjects, so if you're spawning cubes for example you can attach a large number to one GameObject (in a single mesh). These are a lot faster to create, but then you have to worry about updating them. Usually a Unity GameObject uses proper camera math to rotate objects and render them...but if you combine items into a mesh and adjust them individually you need to manually alter the vertices...and unfortunately you can only stream so many new vertices to the GPU per frame.
Then there's a 3rd option where you use OpenGL commands directly in Unity using e.g. Graphics.DrawMesh. Using these you don't have to worry about updating vertices since you pass in a rotation etc. Performance is also a lot better, you can probably do 5000-10000 simple object easily (as in simple blocks etc up to a low few hundred vertices).
In Unity 5.5 they're hopefully adding Graphics.DrawMeshInstanced. With that you can specify up to 1023 (as per last doc I saw) instances per mesh that will be drawn on the GPU...so you're going to be doing 100k-10m small objects (as long as you can have multiple instances of the same mesh).
Overall: Unity is really good as a 3d tool/starting engine. It has a great asset store and a ton of people using it, so it's easy to pick up and learn. However, if your project is just a tiny bit weird or different it tends to fight you; and not just let you do what you want.
Unreal is also an option, however its harder to pick up and doesn't have the same size asset store going for it. With it you can write code in C (although overall it feels a lot schleppier to me than Unity's straightforward C# class layout). But its far more powerful than Unity and you have access under the hood (although that isn't really a bonus for a solitary developer just trying to make a small game). It also has its blueprint system, which is a visual tool for constructing code (same as Stencyl below for 2d).
So you really need to decide if you want/need 3d, or if 2d is ok. If you're going 3d then go for Unity, else if you're ok with 2d, then look at any of these.
GameMaker :
+ One of the biggest 2d engines out there
+- Very good on tile games, less so for custom non-tile games
- Uses its own custom language
- Might be a bit restrictive on output targets last time I checked (that you need to spend money on to buy - everything else here is pretty much free)
CocosSharp : (Or alternatively any Cocos2d-x binding you want)
I'm currently using this for a 2d project. It's basically a more modern version of MonoGame which itself replaced XNA
+ Has a lot of utility classes that handles all the basics such as image loading, sprites, clipping, animation (+a binding for Spine), etc.
- Doesn't come with a frontend, so it's all code based
Defold :
+ Publishes to 6 targets
+ Large user base
+ The engine used by King etc for their games (its their engine)
- Projects are managed online
- Uses Lua for language...not my thing but if you're into that its a bonus
Godot :
+ Decent userbase
- Custom language (until next version when they'll increase C/C# etc support)
- Editor was buggy for me
Stencyl :
+ Large userbase
+ Can write code on frontend using visual blocks, really great for young kids
- Uses Haxe for language
There are many others (of varying sizes) such as Duality, Wave Engine, Oxygine, Panda, Isogenic etc. In general I don't recommend them due to their smaller user bases, making finding help with issues more difficult.
So like I say I'm using CocosSharp since I was looking for a 2d C# engine...if I had to choose one with a frontend I'd look at Defold and then GameMaker (Defold first because I can re-use the Lua code and get a lot more help overall on coding issues). If you want 2d, C# and a frontend then look at Duality/Wave Engine.