I've been spending more time with Unity. I understand the basics. I can prototype a game in a few hours. It is a powerful tool that lets you build 3d games before you understand the nuts and bolts of 3d.
After my first day with Unity, something bothered me about it. I thought I disliked it because it was too high up the stack of abstractions. I thought I disliked it because it was too much point and click and not enough code. Since then I've decided that Unity is a good introduction to the topic. You can start with Unity and then work your way down the stack. You can build things by dragging and dropping components, but you can move on from that.
After reading this post by Jeff Atwood, I realized what really bothers me about Unity: no source. Documentation is good, but nothing beats the source code. I referenced the cocos2d source countless times while building Four Hats and Omegapixel. I've even hacked the source when I felt like I needed to for the project. Neither of those are options when using Unity.
I have developed software using the Microsoft stack: C#, .NET, MS SQL Server, IIS, Windows Server, etc; and I've developed software using an Open Source stack: Python, Django, MySQL/Postgres, MongoDB, Apache, Linux, etc. I like the ideals behind Open Source, but I am not a zealot. I prefer an Open Source stack not for any idealogical reasons, but because having the source code available is a tangible benefit. Unity suffers the same drawback as a Microsoft stack.
Unity is a powerful tool. It is a tool that we will use if it fits the projects, but it will always have that one thing holding it back. No source code.