I've worked for some time with Unity3d and found it's 2D part with OnGUI() or GUITextures too clumsy. Also, even a smallest game done on Unity3d is at least 10MB download which is just too much for a 2D game.
So, I'm currently looking for an engine for 2D. I've tried Cocos2D but it's iOS only and I wouldn't like to rewrite everything into another language for Android (so, e.g. Java port of Cocos2d for Android is not an option). Instead, I want to write the code once and with least hassle deploy it on iOS, Android and possibly Windows Phone 7. I have both Mac and Windows.
Just to be more detailed, here are my requirements to the engine:
- must be cross-platform
- must be efficient
- should be C++, Java, C# or Objective C since I'm comfortable with them and NOT Flash, Javascript, HTML5 since I am not a web developer
- must have a large community, tutorials, additional libraries which cover most of the stuff you'd have when developing on iOS or Android directly (in-app billing, facebook etc.)
- the final delivered package must be not too large
- the engine can be free, but I also wouldn't mind paying a reasonable price
I've found the following engines:
- Marmalade (and IwGame engine on top of it) - C++, found overall very positive reviews of Marmalade but not sure about IwGame. EDIT (March 2013): Looks like Marmalade SDK now includes Cocos2Dx and some in-built IDE which makes it much better (and costs $150 per year for indie dev which is ok with me).
- Corona SDK - Lua (efficiency doubtful), also needs internet connection to compile code
- Cocos2d-x - C++, received lots of reviews from developers, mostly positive and many think it's best for 2D
- Particle code - Java+Eclipse, found no reviews or comments
- Moai - Lua, coudn't find any reviews/opinions on it
- Monkey engine - seems to have too few features
- Haxenme - it's Flash, I've never used it and don't want to
- use Unity3d but with 2D packages like 2D Toolkit
- ports of SDL to Android (also here) and iOS - doesn't look to have much support or current development (?)
- GLBasic - Basic language, I don't like it
- playN - seems to be early in development (?)
- Gamvas - HTML5, doesn't look like a mature engine to me
- Ignifuga - Python, also doesn't look mature
- ORX - not sure if it's still developed (?)
- Construct 2 - reminds GameMaker, might be ok for rapid prototypes but definitely not for industry-level games
- XNA and then port the game using ExEn (would need Mono Touch to port to iOS and Mono for Android to port to Android) - C#, and is probably more thought for folks coming from Microsoft products like xBox (I come from Android). Also, those Mono tools cost $800 in total for small developers
- Impact - JavaScript, uses HTML5. I'm not much into JavaScript (e.g. preferred C# on Unity3d), also not sure about efficiency since it runs in the browser (?)
- GameMaker - own scripting language GML and I actually remember this one as a tool for non-programmers. Has it actually grown into a real engine, I mean for serious development?
- AppGameKit - C++, yet seems to be still pretty new. Haven't found any reviews on it
- use Cocos2D and Objective C to develop for iOS only and then make an APK for Android out of it using Stella SDK. Has anyone done this? I'm pretty sure there will be limitations, and how about Google's in-app billing, AdMob and Facebook integration on Android?
- Moscrif - JavaScript, looks like it's more for former web-developers
- Starling - Flash 11, i'm not much into Flash
- ND2D - not yet 1.0, does it have many features?
So, I'd be happy if you could comment from your experiences with the engines and suggest which one in the list (or anything else that I've missed) is the best for the described requirements. I also may be wrong with my first impressions about some of the engines.
I'm currently thinking of Marmalade+IwGame as the best option but since I don't have much info about Cocos2d-x and Particle code, I am not really sure about it.
Thank you!
EDIT (June 2013): So far I made 2 cross-platform 2D games and used Unity3D with 2D Toolkit plugin for both. For the game with simple GUI I used a simple self-made GUI system based on Unity's own. For more complex one (e.g. where GUI elements can overlap) I used the NGUI plugin. Recently 2D Toolkit added some more classes for GUI which is very handy since one had to use 2 different systems for texture atlases when combining NGUI with 2D Toolkit. I'll definitely try that one in the next 2D game. The main reason for choosing Unity3D for 2D games was that I already was deep into Unity3D both in terms of experience and accumulated code snippets for re-use. Also, I purchased Unity3D pro (with Android Pro and iOS Pro) for 3D games and it made full sense to just pay additional $60 for the 2D Toolkit to get 2D games also covered. I so far don't regret my decision, it seems to have been optimal for my case. The only thing which gave me headache was adding social features with the Prime31's plugins (Android & iOS social plugins) but I assume that their bugs are not the fault of Prime31 but of Twitter/Facebook instead, so I probably would see the same bugs on any other engine or plugin.
EDIT (Jan 2014): I guess with Unity 4.3 the answer to my question is pretty obvious now: the Unity's new sprites system and maybe also 2DToolkit totally beat anything else, especially for people who have (like me) been on Unity for a while and purchased the Pro version with add-ons.