
Ask HN: How to learn game development skills? - agilord
Assuming you know basic computer science and a bit of programming (mostly backend systems), how would you start learning game development skills?<p>I&#x27;m assuming that you need to be aware of:<p>* 2D graphics (creating, editing vector and raster)<p>* 3D graphics (modelling)<p>* 2D and 3D animation (creating the movements, interactions, intersections)<p>* music and sound effects<p>* game loop<p>* UX, controls<p>What else would you suggest to add to the above? Where to start with these subjects?<p>I&#x27;m looking for training or tutorial materials that teach the basics, and not really looking for game-engine based walkthroughs (that can come later).
======
kleer001
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.

------
AwesomeFaic
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

------
deepaksurti
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

~~~
deepaksurti
[1] Blender - [https://www.blender.org](https://www.blender.org)

[2] CGMasters - [https://cgmasters.net/category/training-
courses/](https://cgmasters.net/category/training-courses/)

------
kd5bjo
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.

~~~
AwesomeFaic
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.

~~~
kd5bjo
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.

~~~
AwesomeFaic
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.

------
Pombal
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](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](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.

------
deepaksurti
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.

~~~
agilord
"Learning to write games on the side"

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

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

------
sfgweilr4f
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.

------
ArtWomb
[https://www.edx.org/course/cs50s-introduction-to-game-
develo...](https://www.edx.org/course/cs50s-introduction-to-game-development)

Best of luck ;)

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

