I have a number of people these days asking me how to start games programming and have heard of Unity. In fact they ask me “how do I learn C# for Unity?” when they are getting into games programming and I thought I would throw in my two cents.
Start with learning core C# and then Monogame.
Now people may ask why as Unity is "super easy" and has an editor and is super mainstream right now. Don’t get me wrong Unity is great, I am a big evangelist of Unity. However in my opinion it is not the place to start learning games programming.
Learning Unity, you learn the basics of C# code and you may learn how a component based architecture works and you will become familiar with the API and how to use a nice editor and comfortably live in the Unity bubble. However you are limited to Unity’s way of doing it and actually might miss out on how a game engine actually works. Therefore we bring in Monogame.
Monogame/XNA is a straight up API, no nice editor, no built in component based architecture. It is lovely to use and gives you the opportunity to build your own game engine in a nice environment. People can learn how to become a game engine architect and design systems nicely as they will have to think about these things. What I have learnt in the past couple of years doing professional programming is that being a good programmer is partly knowing the ins and outs of a language and being able to code well, but it is also about designing systems that fit the purpose, are easy to read, maintainable and have the right level of performance you need. By starting with Unity straight off the bat, I think you people may miss that. Sure you can design systems , but if I was learning to game program right now and was primarily using Unity, I would be letting Unity dictate how my systems are designed rather than making Unity work for me.
“So enough of the why Lindsay! If you think Unity is not a good place to start then where should I?"
OK lets get down to business.
Well, you can do a couple of things. If you are studying for you live in the UK and studying for your GCSEs or A-levels (or equivalent if you don't live in the UK) and want to go to Uni and are thinking about a career in video games programming, then look at one of the specialized courses. I learnt how to game program and had an absolute blast doing my 4 year MEng course at the University of Hull.
If you have not got the money or time to go to University (maybe for the second time) then here are a couple of good tutorials and books and articles to get you going:
Microsoft Channel 9 C# tutorials
C# Yellow Book
.Net Design patterns
Once you feel confident, build a small game like an r-type clone, space invaders clone, pong clone, some sort of match 3, basically something 2D and super simple. One of the coolest ways to I found to do this is to play lots and lots of big games then think, how can I make that smaller and a lot simpler.
To get your engine architecture/design on, take a look at a couple of links and books. Google “game engine design”. Here are some links to get you started.
Google Search – Game Engine Design
Data Orientated Game Design
Game Engine Architecture
Game Coding Complete