So I want to be a game developer....

Started by
48 comments, last by obizues 11 years, 8 months ago
Hello all.

I've been reading a bunch of forum posts about game development and I've decided to take the plunge and ask for some advice.

I'm currently a returning adult student in college studying Computer Science. I'm familiar with Java (OOP), Basic, Assembly and a little C. I also know SQL, HTML/CSS, and Based on what I'm understanding I should first teach myself C/C++ and maybe C# depending on if I want to develop with XNA or something like it.

I'm trying to be as realistic as possible, so please feel free to give me input on what I need to do before even thinking about making games or how I should set myself up for long term success instead of an easy way out.

My questions are:

1) Everyone seems to jump right into 3D game design now. Should I be doing that, or focusing more on 2D first? If so in what capacity? What books or examples of learning activities would you recommend?

2) Should I learn DirectX or OpenGL APIs after learning C++? I mean this as "Should I learn either of them, or should I not?"

3) I've seen people are using Unity3D, are they able to do that with only a C#, Boo, or JavaScript background? Why would someone need to learn C or C++ in order to make a game with this? Is it looked down upon by game developers for using a pre-built engine, or is this a viable option? Will using this hurt me in the long run?

4) I'm looking to ultimately get into the gaming industry by "getting into the gaming industry" and making some games. What advice or route would you provide for me to hit the ground running and start on thetrack to having some "finished" projects on my resume? If I shouldn't be making games right now but rather still learning more and more things please tell me.

5) Why do people learn scripting languages such as Lua or Python with C++? How do they interact within game design? I'm familiar that Lua is/was used in making easier WoW expansions, but are they used just because they are easier for most people to use than C++?

6) There is a group (I'm from Milwaukee) near me that develops using Unity3D and lives near me. Even though I don't have C/C++ or C# experience yet, would you suggest I attend? Should I do certain things before attending first?

Everyone thank you very much for your time, and I'm looking forward to any and all input you can provide.

Chris
Advertisement
1) since you are studying CS you should probably wait with 3D until you've taken linear algebra, You can make 2D games using 3D graphics though without the math becoming much of a problem. Edit: you can ofcourse charge ahead before that if you feel comfortable with it (But if you do i'd recommend getting a good linear algebra book). I managed to do a simple OpenGL FPS tech demo without actually understanding matrices(back when i was in highschool) i used tons of trigonometry instead which isn't really optimal even though it works.

2) DirectX and/or OpenGL are good choices if you want to write low level rendering code, the modern versions of both are fairly similar and a good CS program should have elective courses on computer graphics that introduces you to OpenGL (and more importantly, the concepts behind it all).

3) Unity3D is fairly straightforward to get started with, you don't even need a background in the supported languages, as long as you know how to program you can use Unity3D fairly effectivly, (Your Java knowledge should be good enough to get your started, just keep a online C# reference at hand), Most professionals use pre-built engines(since it saves insane amounts of time) so its not looked down upon and i'd recommend atleast trying a few engines out at some point (even if you intend to write your own it doesn't hurt to see how others have done things), Edit: If you plan on going the indie route i'd strongly recommend using an existing engine rather than writing your own since you need to push out games fairly rapidly to make a living (unless you get really lucky)

4a) Make games, lots and lots of games on the side of your studies, you can use for example Unity. (Finished games are very valuable)
4b) Make some shiny tech demos using OpenGL or D3D (it doesn't have to be complete games)
4c) Make game related tools using whatever APIs you want (QT, C#/WinForms, Java/wxWidgets/Swing/Whatever)
Edit: You can skip one or more of these if you're not interested in that field, but i'd recommend trying many different things, having some basic knowledge in various fields is never a bad thing. (You can specialize once you got a decent foundation)

5) Scripting languages are easier to use so you can let non-programmers (level designers for example) use them to get custom behaviours without having to bother you all the time, they are safer so you can let users write their own scripts and distribute to other users without putting other users or your game at risk and finally, scripts are data that can be loaded and modified at runtime (which lets you change and tweak things while your game is running saving quite alot of time, especially on large projects where compile times with C++ start getting frustratingly long)

6) Go for it, you could download Unity3D yourself first and try to make pong first to see how you stand. (If your general programming knowledge is solid enough it shouldn't take you more than an hour or two (If you know Java allready C# won't cause you any problems, the two languages are extremely similar at the basic level and you won't need any advanced language features for a simple game such as pong)
[size="1"]I don't suffer from insanity, I'm enjoying every minute of it.
The voices in my head may not be real, but they have some good ideas!

1) since you are studying CS you should probably wait with 3D until you've taken linear algebra, You can make 2D games using 3D graphics though without the math becoming much of a problem.


I'm sorry I should have specified that I have taken Linear Algebra. I'm currently in my senior year.



2) DirectX and/or OpenGL are good choices if you want to write low level rendering code, the modern versions of both are fairly similar and a good CS program should have elective courses on computer graphics that introduces you to OpenGL (and more importantly, the concepts behind it all)..


We do have a computer graphics course for an elective offered. I assumed that it was more 2D graphics such as Illustrator and Photoshop, but I will e-mail my advisor and ask them what the class entails. Thanks for this valuable insight.



3) Unity3D is fairly straightforward to get started with, you don't even need a background in the supported languages, as long as you know how to program you can use Unity3D fairly effectivly, (Your Java knowledge should be good enough to get your started, just keep a online C# reference at hand), Most professionals use pre-built engines(since it saves insane amounts of time) so its not looked down upon and i'd recommend atleast trying a few engines out at some point (even if you intend to write your own it doesn't hurt to see how others have done things)


Do you recommend any Unity3D books? I've seen a couple on Amazon such as: Unity 3.x Game Development Essentials by Will Goldstone (Dec 20, 2011), and Creating Games with Unity and Maya: How to Develop Fun and Marketable 3D Games by Adam Watkins (Jul 21, 2011). Also, the book with Maya in it scares me a little. Are there free 3D animated models that I can use somewhere?


4a) Make games, lots and lots of games on the side of your studies, you can use for example Unity. (Finished games are very valuable)
4b) Make some shiny tech demos using OpenGL or D3D (it doesn't have to be complete games)
4c) Make game related tools using whatever APIs you want (QT, C#/WinForms, Java/wxWidgets/Swing/Whatever)


What do you mean by shiny tech demos? I'm a little confused as to what those are. Also what do you mean by game related tools? Any resources you could cite for learning these things would be very helpful.


5) Scripting languages are easier to use so you can let non-programmers (level designers for example) use them to get custom behaviours without having to bother you all the time, they are safer so you can let users write their own scripts and distribute to other users without putting other users or your game at risk and finally, scripts are data that can be loaded and modified at runtime (which lets you change and tweek things while your game is running saving quite alot of time, especially on large projects where compile times with C++ start getting frustratingly long)


Would you recommend me to learn a scripting language then even though I already know OOP with Java and working towards C++ and C#? If so which would you recommend? I keep hearing Python, with some talk about Lua.


6) Go for it, you could download Unity3D yourself first and try to make pong first to see how you stand. (If your general programming knowledge is solid enough it shouldn't take you more than an hour or two (If you know Java allready C# won't cause you any problems, the two languages are extremely similar at the basic level and you won't need any advanced language features for a simple game such as pong)


I will definietely do that! Thank you so much for all the replies again!
Unity has free online training seminars. They are definitely worth watching.

Unity has free online training seminars. They are definitely worth watching.


Thanks, I honestly had no idea about that. I think I'm going to take Simon's advice and download it right when I get home.

[quote name='SimonForsman' timestamp='1343139725' post='4962603']
2) DirectX and/or OpenGL are good choices if you want to write low level rendering code, the modern versions of both are fairly similar and a good CS program should have elective courses on computer graphics that introduces you to OpenGL (and more importantly, the concepts behind it all)..


We do have a computer graphics course for an elective offered. I assumed that it was more 2D graphics such as Illustrator and Photoshop, but I will e-mail my advisor and ask them what the class entails. Thanks for this valuable insight.
[/quote]

a good graphics course in a CS program should probably only cover the absolute basics of the API (enough to allow students to draw 2D lines and triangles) and then move over to software rendering to deal with things like projection and transformation properly. (at my school the course was called "Computer Graphics and Visualisation"). If they require students to take linear algebra first its probably a good sign.


[quote name='SimonForsman' timestamp='1343139725' post='4962603']
4a) Make games, lots and lots of games on the side of your studies, you can use for example Unity. (Finished games are very valuable)
4b) Make some shiny tech demos using OpenGL or D3D (it doesn't have to be complete games)
4c) Make game related tools using whatever APIs you want (QT, C#/WinForms, Java/wxWidgets/Swing/Whatever)

What do you mean by shiny tech demos? I'm a little confused as to what those are. Also what do you mean by game related tools? Any resources you could cite for learning these things would be very helpful.
[/quote]
a tech demo is a small application that demonstrates technology, they are a good way to showcase your skills without the need to complete a full-scale project for them, here are two examples from AAA studios
CE3 - soft body physics:

FB2 - realtime radiosity:

game related tools are things like level editors, etc, (Things you get for free with most big game engines), they're just normal applications that work with game related data, nothing special about them really. (Creating effective workflows is still hard though)
As for your other questions:
Yes you should learn more languages, (I'd recommend picking ones that are different from the ones you allready know to get a wide base)
Sorry, i can't recommend any Unity books, (I found the documentation on the unity website to be good enough though.
[size="1"]I don't suffer from insanity, I'm enjoying every minute of it.
The voices in my head may not be real, but they have some good ideas!

a good graphics course in a CS program should probably only cover the absolute basics of the API (enough to allow students to draw 2D lines and triangles) and then move over to software rendering to deal with things like projection and transformation properly. (at my school the course was called "Computer Graphics and Visualisation"). If they require students to take linear algebra first its probably a good sign.


So should I then focus on taking those steps first before jumping right into Unity? In other words, should I just try to draw 2D lines and triangles? If so could you reference which API you would recommend and which language? Also would you mind explaining how this knowledge carries over to then using a program like Unity3D?


a tech demo is a small application that demonstrates technology, they are a good way to showcase your skills without the need to complete a full-scale project for them, here are two examples from AAA studios


I guess at this point I shouldn't focus as much on tech demos, and more on just getting to the point of developing the tech. I say this because I have no idea how I would even go about the most basic processes in these applications much less create a video.


As for your other questions:
Yes you should learn more languages, (I'd recommend picking ones that are different from the ones you allready know to get a wide base)


I currently know Java very well, some C (working on C/C++), Basic(I learned a long while back), and Assembly. I understand that with scripting languages you can make changes without having to recompile. Would you recommend a scripting language? I was thinking about learning Python. Do you think a goal of learning C, then C++ then C# and then Python is logical, or would you recommend something else?


Sorry, i can't recommend any Unity books, (I found the documentation on the unity website to be good enough though.


I found a book online that I will use in conjunction with the websites resources that appear to be pretty robust.



Moving on from here, could you just give me a rough layout of a roadmap I should follow to become successfully able to use a program like Unity to the best of my ability? I guess my biggest question is just how to get to that point. I also don't want to take any shortcuts or learn things halfway, I want to do it correctly.

Basically, I don't want to "not really understand how to render basic objects" but be able to drag and drop a character in Unity3D and make it walk in an environment without fully grasping what's happneing. If you can give me that I think it would be invaluable to me.

Thank you so much again for all your help!

......


1) Just jump into Unity, its not hard, just keep things simple to start with.

2) If you allready know Java and C you shouldn't have to worry about C#, if you're using Unity you'll learn C# as you go anyway. (unless you use one of the other supported languages)
If i were you i'd make a few games using for example Unity3D and then look at Python (Wonderful language and quite a bit different from the ones you know) and Haskell (Very different) (You could also use Boo instead of C# with Unity3D which is very similar to Python)

3) As for a roadmap with Unity.

a) Make a pong game. ( Here is the one i made when i started to use Unity: http://www.reunited-guild.net/pong/ , its playable in the browser so no download required)
b) Make a slightly bigger game, maybe a sokoban clone (would teach you how to deal with multiple level and animated models)
c) Make something a bit more complex, maybe a platformer, try to incorporate physics (fairly easy with Unity and you most likely used basic physics for pong)
d) a multiplayer (networked) version of pong.
e) <insert your own game ideas here, just keep it reasonable>

If you want to learn how to render objects just write a simple model renderer with OpenGL or something, it isn't hard. (You can use OpenGL with Java(LWGJL), C#(OpenTK) or pretty much any language imaginable. (The hard part with rendering is to deal with complex scenes and advanced special effects(these tend to be very math heavy) in a reasonably efficient way). (You could try to make a pong game with straight OpenGL aswell, its not that much harder than doing it with Unity3D allthough it will take a bit longer)
[size="1"]I don't suffer from insanity, I'm enjoying every minute of it.
The voices in my head may not be real, but they have some good ideas!
Hi Obizues,

First, let me begin by giving weight to everything SimonForsman has said. He's put you on the correct path. Here's some other takeaways for you....

  • Learning to program can be thought of as a top-down or bottom-up exercise. Top-down means learning high-level languages such as Java, C#, Python, etc... and working your way down to C and assembly. Bottom-up means going the opposite direction. The benefit of top-down is you first learn high level principles that can generally be applied to all programming languages. So if you already know Java, you've got the basic semantics of programming down already. Now it'll just be a matter of learning the specific syntax of other languages, as well as a few other language-specific features. The general drawback of the top-down approach is there's very little incentive to go deeper than you believe necessary. Very few programmers who start with C# or Java bother to learn C. And an even fewer number of C++/Java/C# programmers know ASM. This is because the deeper you go, the more cumbersome programming becomes. And it's generally just less enjoyable.

  • In contrast to the above, you can learn bottom up. Tackle x86 and amd64 assembly language, low-level C, and then work your way back up to C#, etc... The benefit to this is by the time you're done with ASM and C, you'll be intimately familiar with how your computer hardware and OS work together, and there will be few technical problems you can't reason out at that level. The drawback is that going bottom-up can often teach what would be considered by today's standard "bad habits." The solution? There isn't one. But to be a true master of your craft, you need both. Since you already know Java, it may be easier for you to go top-down.

  • If you're going top-down, it's not only possible, but quite enjoyable to learn to program in a new language WHILE making games. As others have pointed out, Unity allows writing the behaviors for your objects in C#. Coming from Java you'll probably stumble over the syntax a little bit, but you'll learn C# as you go along, and probably have a blast doing it.

  • OpenGL and DirectX are APIs that simplify communicating with your GPU. Instead of having to write your own driver-speak, you use the libraries to do it for you, and you just provide them with the relevant arguments and structures to the associated method calls. But... that doesn't replace the need to fully understand how a graphics pipeline works. There's plenty of good documentation available on the web which details what happens to your 3D vertices/triangles as they're passed through the various stages of the pipeline. This is vital to understand... eventually. For the time-being, it's fine to, once you've been using Unity for a while, to try your luck at writing your own render-loop, that draws your own 3D models to the screen. This not only will require you to learn Graphics Programming fundamentals, but will also exercise your 3D math. As getting a 3D object to show up on a 2D surface is entirely about Linear Algebra and Transformations.

  • Above all else, get started now. Start making games with Unity and start working your way down from top to bottom, from Java to ASM. Also, work your way down from using Unity to create your games, to writing your own engine. The deeper you go, the more capable you become. But most importantly, set small, achievable goals and then get started working on them. When you've achieved one, move on to the next.

  • As to your scripting questions, Lua is designed as an embedded language and is more often used for scripting game engines than Python. Python is a "heavier" scripting language, and can be used to write games in its own right. Also, the syntax of Lua is more C/C++-like, so for sheer ease of transition, I recommend starting with Lua if you're going to learn a scripting language soon.

Cheers and good luck to you. I look forward to seeing your name in the credits some day.
Jeromy Walsh
Sr. Tools & Engine Programmer | Software Engineer
Microsoft Windows Phone Team
Chronicles of Elyria (An In-development MMORPG)
GameDevelopedia.com - Blog & Tutorials
GDNet Mentoring: XNA Workshop | C# Workshop | C++ Workshop
"The question is not how far, the question is do you possess the constitution, the depth of faith, to go as far as is needed?" - Il Duche, Boondock Saints

If i were you i'd make a few games using for example Unity3D and then look at Python (Wonderful language and quite a bit different from the ones you know) and Haskell (Very different) (You could also use Boo instead of C# with Unity3D which is very similar to Python)


I guess I was under the wrong impression with Unity3D. I had wrongly assumed it was an engine only used for 3D games. JWalsh also suggested Lua instead of Python. Why would you suggest Python instead of Lua? I understand each side probably has its pros and cons, but I'm interested in what part about it you like or don't like about Lua in order to make a decision.


a) Make a pong game. ( Here is the one i made when i started to use Unity: http://www.reunited-guild.net/pong/ , its playable in the browser so no download required)
b) Make a slightly bigger game, maybe a sokoban clone (would teach you how to deal with multiple level and animated models)
c) Make something a bit more complex, maybe a platformer, try to incorporate physics (fairly easy with Unity and you most likely used basic physics for pong)
d) a multiplayer (networked) version of pong.
e) <insert your own game ideas here, just keep it reasonable>


I also was unaware that I could make games that I could export into .swf files with Unity3D. This seems like a great outline, and I see can all the fun trouble that I'll probably have as I go along from step to step.


If you want to learn how to render objects just write a simple model renderer with OpenGL or something, it isn't hard. (You can use OpenGL with Java(LWGJL), C#(OpenTK) or pretty much any language imaginable. (The hard part with rendering is to deal with complex scenes and advanced special effects(these tend to be very math heavy) in a reasonably efficient way). (You could try to make a pong game with straight OpenGL aswell, its not that much harder than doing it with Unity3D allthough it will take a bit longer)


What's the most used API? OpenGL, Direct3D, DirectX, a combination of all of them? I guess I don't fully understand how to go about learning how to render objects myself without a premade game engine. This is the greatest part of my confusion now that you have cleared up a really well thought out roadmap for my Unity experience.

Lastly, after following the instruction and tutorials on the Unity3D site will I be prepared in order to create a game like pong? In other words, will I need to look for additional sources at this point since I will most likely get "stuck."

Also when moving along with these projects do people generally post links to them in the forums for critique?

Thanks again for all of your time!

This topic is closed to new replies.

Advertisement