How much "harder" is 3D than 2D in terms of:
- Amount/complexity of the code
- Level of math skills required
- Time involved in making art assets
Original title: How hard is 3D game development versus 2D?
3D is an order of magnitude harder than 2D:
This is a highly subjective question, since the answer depends on personal preference/experience/knowledge/intelligence.
I will try to answer neutrally, but since I am only a programmer and not an artist i can only hypothesize for the last point.
Code complexity should not be so very different, except in maths and maybe rendering/physics. Game Logic isn't so much different if you take a healthy level of abstraction (not too much - you're trying to make a game not an engine, at least I guess from your question.) Obviously its a lot easier to calculate movement in 2D because you have limited perspective. Physics is WAY more difficult when dealing in three axes. Also, loading a Sprite from a Bitmap is a lot easier than loading a 3D Model (and possibly texturing).
Maths is more complicated for 3D (a no-brainer really - quaternions, vectors, matrices. 'nuff said)
For art, I think it must be more difficult for 3D too, since you need to create art that looks good from every possible viewing angle (or at least a wide range), and you usually want to texture things too. Animating a mesh is no picnic to get realistic, and getting the texture to play along isn't either.
Lots harder. If you're not comfortable making a 2D game, you will REALLY not like what it takes to make a 3D game.
The good news: 99% of the time, you don't really need it. Think of any 3D game you can. Take the camera, fix it on the ceiling looking down so that you're now looking at a 2D plane. Doom becomes Gauntlet. Civ IV becomes Civ I. Metal Gear Solid becomes the original Metal Gear. None of these games are "bad" just because they're 2D; they are perfectly playable and generally have much of the same gameplay.
The other thing to consider ... with a 3D game you probably want to consider using a pre-existing engine and concentrate on making a game not an engine. It can go someway to reducing the time and difficulty taken in a 3D game (as excellently identified by munificent).
It's much easier to build a 2D game ground up. But obviously you can (and should consider) using sprite, sound, portability libraries as well. No point in reinventing the wheel except for education purposes.
Seems obvious - but I thought it was worth saying.
Largely, 3D is going to introduce more difficulties than simplifications. But I just feel like adding a few things that might actually be easier in a 3D game: