Recs.
Updated
Unity added 2D support with their 4.3 release of the engine. The 2D package comes with options for both sprite sheet animations and bone based animations with the added support of Mecanim, Unity’s new animation solution.
SpecsUpdate
Pros
Pro Provides access to a huge list of assets through Asset Store
For those developers who can't afford an artist, or aren't skilled enough to create their own art, Unity features an Asset Store full of a wide variety of free and paid assets that can be easily added to your game. The Asset Store has more than just music and art. It also has code and modules that can be added to your game such as unique lighting or GUI systems.
Pro Supports 2D and 3D
With Unity, knowledge of just one engine is needed to be able to create both 2D and 3D games.
Pro Great editor
The editor GUI is very powerful and intuitive. It allows pausing gameplay and manipulating the scene at any time as well as progress gameplay frame by frame. It also has powerful asset management and attribute inspection.
Pro Works with 3rd party IDEs
3rd party IDEs, like Visual Studio, can be used to write code for Unity.
Pro Art Asset pipeline supports a lot of tools
Assets can be imported from many different formats including .FBX, .OBJ, .Blend, and .Max.
Pro Lots of resources to learn from
Unity3D provides an exhaustive documentation where everything is given a full description supplied by a number of examples as well as video and text tutorials and live training sessions to understand the ins and outs of the engine. In addition there's an ever-growing community that can offer advice to help resolve any situations that may arise.
Along with the official Unity resources, there are many high quality (and often free) third party tutorials available.
Pro Easy to learn
It is one of the biggest and best tools available, and there are a lot of tutorials available to help learn how to make great games. Even without knowing how to program, there are assets in the Asset Store that can help with that by allowing linking scripts inside the game engine.
Pro Offers a choice of scripting languages
Unity provides a selection of programming languages depending on preference or knowledge. C# (CSharp) is arguably the most powerful, while JavaScript has the widest selection of tutorials. It should be noted that it's probably best to avoid Boo (a flavor of Python).
Pro Well structured
Overall, a coherent engine with a rational approach. People who complain a lot about being forced to hack around it usually don't read the docs, like the one that describe orders of execution, or specific functions hooks and such. Some like to say it lacks raw power where people who are used to standard optimizations have no problem. For example, it is not uncommon to encounter users who complain about low FPS but forgot to activate occlusion, flag static elements, activate animations culling, and so on. As for complaints about C#, people who are transitioning from C++ were already bad at C++ before being bad at C#. They often come from the PC world where the sheer power of today's machines is very forgiving compared to the platforms we had to develop for in the 80s~90s. One of their errors is, for example, to never read this doc.
Cons
Con Adds too many features without fixing earlier issues, rapidly increasing number of bugs that will never get fixed
Unity continues to add many new features without fixing earlier issues. Unity is either understaffed, overambitious, or both, resulting in a continual increase of problems and degraded experience across a number of platforms. Many bugs are reported daily and never get addressed, and there are many bugs from previous versions that are never looked at or fixed.
Con Needs a more up to date C# and CLI
Unity 2018 finally switches to C# 6 + .NET 4.5 / .NET Standard 2.0. It's not a big falling behind (most up to date would be C# 7) but still a bit annoying.
Con Hard to maintain projects due to vendor lock
Unity3D is proprietary, closed source game engine. Unity asks money for features like basic version control support, etc. It is impossible to migrate a game from Unity3D in case performance does not satisfy growing requirements of a project.
Con Controller input system supports a low number of controllers
You would think they would have at least an SDL2 level of supported controllers... but they don't. Defining inputs is also terrible and easiest done in the source file instead of the UI. Buy an asset for controller support instead.
Con Asset bundles can be cumbersome
Asset bundles are a way to load external resources that are not packed with the game or application and offered as a separate, optional package. However, they may not be compatible between versions or even platforms (you have to create them separately).
Asset bundles need to be loaded and unloaded, avoid concurrent loads from web or cache or a naming collision can happen. You can find workarounds with static objects (load obj
files and textures by code), but for animated game objects you are pretty much stuck with this.
Recommendations
Comments
Flagged Pros + Cons
Pro Used by indie and big name studios
Games have been made in Unity at all levels of the Video Game industry. If you want to make games, this is a great engine to learn. Learning Unity will teach you the basics for any engine, and if you want to get a job at a big studio there is a chance that you will be working in this engine there as well.
Pro Cross-platform
Unity 3D supports 12 platforms in all, including Windows, Mac, Linux, Web, iOS, Android, and even consoles.
Pro Allows for rapid prototyping
Unity's modular system and usability allows for you to quickly develop a prototype of your idea. It has features like drag & drop editing, shaders, animation and other systems already in place to allow you to dive right into developing your game.
Pro Lots of assets can be found in the Asset Store
For those developers who can't afford an artist, or aren't skilled enough to create their own art, Unity features an Asset Store full of a wide variety of free and paid assets that can be easily added to a game. The Asset Store has more than just music and art. It also has code and modules that can be added to games including unique lighting or GUI systems. It also has powerful asset management and attribute inspection.
Con Comparatively high learning curve is putting it nicely
Expect to spend days upon days researching basic functionality. Although C#, JS, and Boo have documentation available online, it can still be difficult to understand the library and Unity's component based system.
Con Must need along very time to complete the game
Taking along time to complete the game
Out of Date Pros + Cons
Pro Allows a choice of scripting languages to use
Unity provides a selection of programming languages depending on preferences or knowledge. C# (CSharp) is arguably the most powerful, although the majority of tutorial languages are for Javascript. It is probably best to stay away from Boo (which is a flavor of Python).
Pro Royalty-free, one-time licensing fee
Once a license is bought, there are no additional costs that need to be taken into consideration.
Con Very self-centered engine
Unity3D uses a very unique approach for doing things, most of knowledge acquired while using it, would completely un-transferable to other engines.
Advanced Unity3D programming is really dealing with Unity3D bugs, and finding loopholes around engine issues, nothing to do with graphics, etc - skills which would be valuable with other engines.
Con Encourages bad coding practices
A lot of Unity code feels like a hacked blur of arguable coding practices. I really like C# and .Net, but the way it is used in Unity makes me feel uneasy. A lot of the API is done in "C Style" (public static methods, available at all times), I am encouraged to use public fields for everything, a lot of questionable implicit casting... the list goes on. I'm a little "scared" that a lot of people will actually learn C# by using Unity.
Con Development is not so multiplatform
Currently, development environment is available only for Windows and Mac OS X, but Unity Technologies is already working on a Linux version of the Unity Editor.
Con Elitist attitudes
Quite a few people in the community have highly elitist attitudes and are quick to put down people using other game engines.
Con No autocompletion for UnityScript
UnityScript (a.k.a Unity JavaScript) is designed for beginner programmers. Since MonoDevelop doesn't have autocompletion for this language anymore it "forces" to switch to C# which could be too difficult for beginners.