I started out using Panda3d, writing in a combination of C++ and Python. I am in the midst of trying to switch over to Unity, which uses C# and Boo (and JavaScript). I thought that the change would be nice for several reasons. First, Unity has much more robust out-of-the-box gui tools, which I felt was important given how Rebellion plays. In Unity, I can write this: function OnGUI () {
scrollPosition = GUI.BeginScrollView (Rect (10,300,100,100),
scrollPosition, Rect (0, 0, 220, 200));
GUI.Button (Rect (0,0,100,20), "Label");
GUI.EndScrollView ();
}. In Panda, this took me about three hundred lines of code to get the functionality I wanted. Second, workflow. Unity supports a much wider range of image and model formats, and importing graphics files is extremely easy. No special import/export required. Third, I prefer Java's syntax to C++ and even Python, so C# and Boo 'feel better'. Unfortunately, Unity is at all what I expected. It's written for artists (who I'm not) rather than programmers (also who I'm not, but sometimes convince myself that I can imitate). Almost everything is handled visually. This is disturbing, since I'm a control freak. Functions are 'attached' to visual representations of objects. Classes and objects are hidden in 'prefabs' and 'GameObjects' which, again, are given visual representations. Why does my objectManager class have to look like a cylinder? I know that there's some way to dynamically instantiate prefabs and GameObjects, but darned if I've figured it out. If I can't figure out how to use the engine within the next several days, I'm going to switch back to Panda and just deal with its shortcomings. But hey, if you can do this: http://vodpod.com/watch/2413481-rpg-prototype-made-by-unity-3d in Unity, even with its annoyingly oversimplification, then surely it'll work.