Benjamin: Currently Xamarin is the best choice for .NET on iOS and Android, ... but horrible for game development, nothing works, nothing is supported.
Henri: Can you elaborate a bit on that? What kind of difficulties you encountered?
We are currently considering between DeltaEngine, or going "naked" with raw MonoTouch/MonoDroid (or staying/resuming with Unity). So a good time for you to make a sales pitch how much time DeltaEngine is going to save us :)
This answer is from early 2011, but still mostly valid:
Well, I have not used Unity for years. We used it in 2009 for a few iPhone games and prototypes and it is still used by our
iSkat game, which is played quite a bit still even after all these years. But back then the main problem was getting used to the programming in the Unity Editor (even if doing everything in Visual Studio, to test you have to go back to Unity), which is really a problem if you want to do test driven development. Also the performance was horrible and every upgrade unity got multiple times faster, which is something you will never see in an engine like Unreal or CryEngine (it is already optimized a lot and they can only give you a few percent better in some area).
But Unity3D is far too successful to convince any Unity fan to not use Unity, that is not our audience yet. We don't even have comparable tools in the beta yet and the earliest pitch we should make is at version 1.0 (when we have plenty of tools and more showcase games).
Then there is obviously doing it all by yourself in whatever native language required for each device (Objective-C for iOS, Java for Android, XNA for WP7, PC whatever, etc.), which is an easy pitch because no one likes to do that. We have written several Objective-C games and while it is true that you can get used to it, most .NET developers will never like it and it takes ages to do simple things (at least simple in .NET terms where the framework already provides so much).
So finally there is Xamarin, a great toolkit to allow writing .NET applications on iOS and Android, which is great if you want to write a native iOS application, but you don't like Objective-C and much rather use .NET. However it is still very low level. If you have ever worked with Xamarin (or formerly MonoTouch) you know that you still need a Mac, you still need an iPhone, you still need to learn all the little details about iOS devices, you still need to know the tools on the Mac (XCode, Device Simulators, Profilers, etc.) and worst of all: You still need to learn about all the little problems and issues iOS, Cocoa and whatever frameworks you want to use all have. If you like it close to the metal and you want to code at this level and do everything yourself, it is certainly the way to go. I would even argue that if you really want to write just an iOS game and you don't mind Objective-C you don't even need Xamarin because it won't help you in any way except that it provides the .NET framework.
Now the main issue is something else. We think game developers just want to focus on their game ideas and implement cool shaders, rendering tricks, click some UI together and get to a testable game asap. This is not possible if you start from scratch and solve all the little low level problems one by one. That is exactly the reason engines have been so successful in the last years (especially Unity and Unreal). We try to bring tools to Windows programmers (which is just a bigger audience than any other programmer group) and let them decide what they want to use. We obviously provide some modules to make things work (each platform has Graphics, Input, Multimedia modules and most Physics modules work on all platforms, etc.), but the programmer can decide himself if he wants to change rendering to deferred or not, use this multimedia API or not, focus on just one platform or get them all, use this physics engine or not, etc. There is just not a solution that fits all problems, but if the solution is flexible enough you might still get there much easier than starting from scratch.
Lets take one example to make all my crazy talk above a little more useful and concrete: If you want to write an OpenGL 3D game in .NET for the Android using Xamarin, then you are in a world of trouble. Maybe the framework gets better over the years, but the current state is that you cannot even create or use a Depth-Buffer AT ALL. I posted this 9 months ago as a bug, but it has not been resolved and there are many other issues like it (input crashing, OpenGL is not completely implemented, etc.):
https://bugzilla.novell..../show_bug.cgi?id=662079
So obviously the Mono for Android team has no time to fix game programmer problems as most of their customers don't need it, but in order to make a game like
SoulCraft work, we needed to fix all that problems and make it as easy as possible for game programmers to just write their game in Windows, then let the Content by converted by the
ContentSystem and let
BuildSystem handle all the fixes and issues automatically. And whatever features will be added in the future will automatically apply to everyone using our services.
More FAQ and older information can be found in our
old wiki.