jackhearts,
I think you’ll find that Unity is very well-suited to 2D game creation. Furthermore, and perhaps more importantly, the development environment itself is fantastic (maybe the best there is), the product is receiving constant, meaningful updates, and the developers are extremely knowledgeable and high-touch. This forum community and the Unity Store development community are excellent resources as well. So right out of the gates, it’s a very strong choice.
You may find that it is helpful to think like a specialized 3D programmer and not a 2D programmer. We just moved from a 3D MMO to a 2D (ish) match&slash project, and what I found when bringing new programmers on is that some of the 2D tasks we’re doing actually require more in-depth knowledge than seemingly-sophisticated 3D tasks. This is all knowledge people should have anyway, but Unity doesn’t do a lot of hand-holding for 2D assets.
For an example of what I mean, consider this: Unity does not expose texture bytes in RAM directly. Instead, you work with arrays of structs (Color or Color32), which have relatively expensive getter/setter functions (this is necessary because of how much work is required to make a texture useful under the hood). So the simple task of compositing sprites, if you do it the 2D programmer way, can be slow and fairly awkward.
The 3D programmer way is to using shaders that either do inline blending of multiple textures via Graphics.Blit(), or the more traditional method of creating a bunch of quads with a simple alpha blending shader and using an orthgorgraphic camera to render the composite you want (all of these methods require the use of a RenderTarget, something you’ll be seeing a lot of in 2D).
Another example would be simple sprites with spritesheets. You simulate these by using quads, which either have their UVs updated periodically to sample a different region of the sheet, or by writing a shader that has a configurable UV rect which you update during runtime.
Unity’s default UI system are, in my opinion, its weakest area and really the only thing I really don’t like. However, this highlights a real strength, namely the Asset Store. The NGUI toolkit on the store is a brilliant addon that may be of interest. However, you can write your own easily enough as well. A lot of gameplay interaction details for our current 2D game go way beyond the scope of touch/drag UI components, and they were very simple to implement. Just always be willing to build your own, thinking about things the 3D way, and you should be fine.
Regarding occlusion and general optimization (batching and such), yes, Unity does offer a lot of convenient features, but there is not much work involved in developing your own. This does get at the question of whether to develop the “traditional” way, where Unity is basically a display library, or the “Unity” way, where code is all contained in autonomous, task-specific component scripts. We are very heavily into the traditional way and having great success.
I’ve been in a lot of conversations with people, on forums and in person and even within my company, who seem to think that Unity is a paint-by-numbers prefab assembly tool with only one way to do everything. It does sort of come across that way publicly, and it can be used that way I suppose, but we’re finding very few places where we can’t go deep enough to do exactly what we want with a very specific application architecture, so I think you can completely ignore any commentary to the effect that it’s limiting. It really isn’t.
If you were comfortable with C++ in Marmalade, I don’t think C# is going to pose any problems. Except maybe getting used to how civilized it is. Bear in mind that Unity uses Mono, which means you only have access to .NET 2 functionality and a couple extras. This is quite a lot, however, and we’ve added and ported a number of custom libraries with no problems.
Meanwhile, I’ve been using Unity for a while now and am just getting around to looking at Marmalade :). It seems interesting, I plan to do some horrible weekend warrior sludge in it and see how it is in practice. But I would be surprised if I found it preferrable to Unity at this point.
Good luck!
Adrian