Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: How to learn game development skills?
16 points by agilord on Aug 7, 2019 | hide | past | favorite | 16 comments
Assuming you know basic computer science and a bit of programming (mostly backend systems), how would you start learning game development skills?

I'm assuming that you need to be aware of:

* 2D graphics (creating, editing vector and raster)

* 3D graphics (modelling)

* 2D and 3D animation (creating the movements, interactions, intersections)

* music and sound effects

* game loop

* UX, controls

What else would you suggest to add to the above? Where to start with these subjects?

I'm looking for training or tutorial materials that teach the basics, and not really looking for game-engine based walkthroughs (that can come later).

Don't forget about fun. Games need to be fun.

To that end I'd recommend some non-computery game design too. Research dice games and card games, design and history. Design a dice game. Then make a card game or two. Test them out with friends and relatives. Make iterations of that game. Sketch out a board game.

This may be more the scope of a game producer, and if one works on a large game others will be managing the mechanics, but most everyone that works on computer based games also loves gaming in general. And it's going to be a miserable time being the only one on a team (if someone one got the job) that doesn't play games in general.

Indie game designer here with a long history of self-education. My history isn't really applicable any more but it may help with your journey.

With an interest in comic books and cartoons, I began practicing animation in the margin of my paperback books. Flip-books got me interested in Flash, and I spent some years learning basic frame-by-frame animation. Setting up menus and basic playback controls opened the doors to ActionScript, which got me started with choose-your-own-adventure animations. As I experimented with basic game mechanics, I started to play more games, and eventually turned to Java to learn "real" programming, where the concept of game loops and loading external images was introduced. After practicing on and off for years, Unity appeared and opened the doors to 3D game development (I was taking a computer graphics course in college around this time as well). I took some time to read up on level design, since I never really worked in 3D space prior to this. Since then, I've picked up bits and pieces of incorporating stronger media (textures, music, sfx) and polishing the user experience (more attention to the GUI and overlays). Most recently I've added analytics and other metrics to improve my understanding of how users behave. Funny enough after all that, now I'm designing tabletop games.

That's my journey, at least.

Comic books -> Cartoons -> Paper animation -> 2D Digital animation -> Scripting games -> Developing games -> Using external assets -> 3D games -> Level design -> Low-level concepts -> Polishing media use -> Polishing GUI -> Analytics -> Tabletop

There are 2 pieces to developing a game:

- Developing the game assets (2D/3D models, sounds, animations etc etc). Each in itself a role in production; however no harm in learning how to do at least a few. I will strong suggest starting with Blender (it's free and great) and use CG Masters courses.

The other piece is bring your assets live through code. Again this has different roles:

- Gameplay programmer, Graphics Tools Programmer etc.

Here you have the option to learn from ground up or just learn the tools and API's (Unity, Unreal etc). Ground up route is arduous but greatly beneficial as is anything when you derive from almost first principles. For this I would say:

- Write an animation loader which can read skeletal animation and play it

- Write a mini game engine which supports animation, physics and sound.

I have not listed the mandatory: GL, Vulkans, Metals, and DXes of the world to be learnt.

As listed in the other thread, what route you choose will heavily depend on your end goal. I would say though from personal experience, just learning to write games on the side is not only fun but also makes you a better programmer, the better part may not happen when you work on a real game though there are exceptions.

[1] Blender -

[2] CGMasters

I'm actually more interested in WHY you want to go into the games industry in the first place.

Whats your primary motivation? In your mind, how does the gaming industry benefit you? Are you doing it for satisfaction of an interest in games? Is it for money?

How many projects have you completed? Have you got a portfolio of projects? github etc.

If you have a computer science/programming background, don’t worry too much about the skills you listed— they’re not ultimately that different than what you’ve already learned and you can pick them up as needed.

The game design skills are probably what you should be focusing on first: as far as I know, nobody knows how to teach them and the only way to learn is to make (bad) games yourself. Come up with a small idea, make a prototype, and play it. Ask yourself which parts are fun and which parts aren’t; make an adjustment and try again, or start over with a different game idea.

As you go through this process, you’ll necessarily need to acquire some technical skills, but they’ll each be in support of a specific outcome. More importantly, you’ll start to understand how your decisions at the design/programming stage affect the players’ experience.

I would argue against that nobody knows how to teach game design, I majored in Computer Science & Game Design at Northeastern University and their program taught us the relation between mechanics and emotion, asking the right questions, and understanding the challenge of player education. Of course, these are a minor subset of game design but are arguably some of the most challenging elements, especially to learn on your own.

In terms of self-education, I would recommend to play as many games as possible, and play them twice. The first, as a player: develop an emotional connection with the experience. The second, as a designer: look at everything under a magnifying glass and never stop asking "why did they do this the way they did?" Hope that helps, just my 2 cents.

I tend to think of all creative disciplines (including game design) as both universally learnable and unteachable. They’re the class of things that fundamentally hinge on personal style, which develops only through experience.

There are certainly associated technical skills that can be taught effectively, where there’s a definite right and wrong technique. There’s also analysis, where you take an existing work and figure out how it produces the effect it does. That’s also teachable and can provide a font of inspiration of things to try, but there’s a world of difference between knowing why something works and being able to pull off the same trick yourself.

Beyond that, most classes in creative disciplines seem to be primarily a bunch of prompts to get the students to make lots of different things, and exercise their creativity.

Fair points! I will concede the fact that my example + experience has taught me how to learn, but didn't necessarily teach me directly. Solid rebuttal. I think there are intricacies within game design that are quantitative enough (either due to their relation with technical or otherwise non-creative elements) that the systems can be inherently taught. But I do agree that plain-and-simple "good design" is something learned from experience and application.

It would also be good to add your objective:

- Learning to write games on the side

- Learning graphics programming using games as project based learning approach

- Learning to switch to a career in the games industry

Each will give different paths.

"Learning to write games on the side"

I can understand why you are emphasizing this but "simpler" 2D games or toy games might be possible on "the side" :-)

I think he was answering your question rather than emphasizing anything.

I would recommend you learn by doing, one step at a time.

Here is an example path that builds skills on top of each other, mostly geared towards programming, based on the background info you provided:

1. Create Tic Tac Toe. This will get you familiar with the core game loop. Read input, update game state, draw, repeat. It is a bounded project so you can finish it. Finishing projects is a skill on its own. If you want to use C or C++ have a look at Simple DirectMedia Layer (SDL) or Simple and Fast Multimedia Library (SFML). These libraries abstract OS functions like reading inputs and putting pixels on the screen so you can focus on the core game mechanics. If you want to use Python look at PyGame, for example. The industry mostly uses C++ with Visual Studio so keep that in mind if you want to join a company later on. Here you can find some tutorials on SDL: http://lazyfoo.net/tutorials/SDL/index.php

2. Create Pong or Breakout or any such 2D game with familiar mechanics. Then asteroids. Then battle city. Then super mario land. Each of these on its own teaches you a skill that you didn't have before. If you find yourself repeating the same code, abstract it away. This is the beginning of a game engine - a small framework of reusable components from game to game.

3. Once you have done enough 2D projects that you feel like you have a good grip on most components individually and how they come together as a whole, move on to 3D. Read Game Engine Architecture. Read good open source game code like the doom3 http://fabiensanglard.net/doom3/index.php Create small graphics demos where you can learn how to use shaders - shaderToy is helpful here. Create 3D Tetris.

4. By this point you will know enough about games to be dangerous. You will know what is most interesting to you. Maybe it's AI, or graphics, or physics, etc. Create demos and games that showcase that field you are really interested in. Try and partner up with people with complementary skills to yours.

There are many ways to learn game development, the one I'd recommend the most is the one that seems most interesting to you and gets you actually creating and finishing games.

Don't do this. Do something useful with your time instead.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact