It's been a long term intention of mine to have a go at making a little game or two using one of the 'indie friendly' engines, most probably Unity. I'm not intending to sell it, make an MMO or any other overly ambitious project, this is just for my own fun and learning.
This week I finally got around to getting started and got Unity up and running. Now, I'm fine with almost every aspect of the art/technical side, heck I can even do the (albeit basic) animation and effects, certainly enough to do what I intend to do, but I'm hitting a real wall with the coding side.
I know zero programming. Nada. I know a bit about how it works (variables, functions, arrays etc) but I can't write code at all. I was under the impression that I would be able to get stuck in and get results pretty easily judging from the many great examples of people who are 'beginners' but either these people are upper level geniuses, or they have access to a secret stash of tutorials that I don't know about.
I've found a fair few YouTube videos and there's plenty of tutorials on the Unity site, but a lot of them seem to be out of date and I found that some of the examples referred to presumably old builds of Unity. Others were just like 'here's the code, copy it' which doesn't really help me understand what's happening.
So, you guys who've made games coming from an art background, how did you get started? Do you have any resources for beginners?
I want to keep this as hands-on as possible, I don't really want to just put it all on hold while I cram a stack of C# books, I find I learn best when I can apply what I'm learning to 'real-world' examples.
Maybe I'm just asking too much, I just see so many people who say they couldn't code and they've made awesome happen, and it's making me feel either very dumb or missing some great resources.
Replies
then it was just a lot of experimentation and use of the scripting reference
http://unity3d.com/support/documentation/ScriptReference/index.html
Also check out www.thenewboston.com He has tons of video tutorials on various programming languages.
You probably know this already, but you've got three programming choices with Unity, you only need to choose one: UnityScript which is very similar to JavaScript, C# which is fairly similar to Java, and Boo which I read is similar to Python.
Code Academy has a JavaScript course.
Udacity is a great place to get started with Python and programming/computer science in general.
The Programming and Scripting Master Thread also has some links to resources for beginners. The course from Stanford covers Java and is very good for learning fundamentals, though it'll probably be more straightforward to learn C# from thenewboston which PhattyEwok posted earlier. The MIT course teaches programming with Python though I'd go with Udacity as it's interactive and much more focused toward beginners.
If your math knowledge is shaky you'll also need to learn it as you move onward. Trigonometry, discrete math, and linear algebra are what you'll need eventually.
EDIT:
I've personally found that learning to code and especially code for games to be very challenging. Imho it's really not a trivial thing to do. If you're having difficulty I think this is completely normal. Math has been where I've been having the most trouble. Good luck!
EDIT2:
I just saw these tonight, they look fairly up to date: http://active.tutsplus.com/sessions/getting-started-with-unity/
You should easily be able to write some super simple code much like you're able to pull around boxes in your 3d program, but to get around stuff you just have to use brute force, practice every day.
Then you will be using C#.
Start from learning it. MSDN, Blogs, and free tutorials will be more than enough to start you get going.
I suggest starting by downloading Visual Studio, and start coding real-world apps from scratch right on. Like console calculator (yeah, I know most overused example). But if you are total beginer it shouldn't take you more than 2-3h. From that point, just keep coding more complicated apps, and if don't know something, google it. You will most likely find answer on stackoverflow.com
Ok I'll get stuck in. I think that is indeed the best approach. Although I'm very much still 'learning' the art stuff (as we always are), it's been a while since I've attempted something as a complete beginner, I guess it was probably the same when I started out on the art side.
Thanks again guys!
i worked through two python books ( http://learnpythonthehardway.org/ http://www.openbookproject.net/thinkcs/python/english2e/ ) and wrote a small game with pygame - I then moved on to build a game in unity with boo ( which is very similar to python ) and then switched over to c# because of lack of resources. so i guess it would have been a good idea to start directly with c#.
there is like every beginner code question asked at stackoverflow - so use it
yup c# hands down.
@TeeJay:
I think you've got a PS Vita so you might also be interested in the PlayStation®Mobile Developer Program and these PlayStation Mobile SDK Development tutorials. From what I understand it's all C# too.
before you keep the coding hands on, you should consider writing what you want to do in coding in an English form "psudocode," and then Unified Modeling Language, these two things will really help you understand how programming should work when you get to the hands on coding.
I would recommend you to buy books like C# for dummies because it has pretty much everything that you need to know for beginners - intermediate level and maybe advanced. I graduated as a software engineer but I keep these books because even if you are a programmer you may want to get back to them to review (which I have been doing these days.) Right now the books I am using as resources are as follows:
C# 2010 all in one for Dummies by bill Sempf, Chuck Sphar and Stephen Randy Davis.
C# 4.0 Unleashed by Bart DeSmet
Managed DirectX 9 Graphics and Game Programming in C# by Tom Miller.
Compilers I use are LinQPad and Visual C# Express 2010.
You have to spend alot of time learning this and once you start understanding how coding works and what it requires you will start understanding the code reference anywhere.
Just keep practicing and start with easy and small scripts. In the end, those are the things you'll be mostly needing afterall. I only needed some heavier stuff for integrating the AI (SimplePath). And yeah, Unity Scripting Reference is your best friend. And if you need help just ask in Skype and i'll help if i can
edit: i disagree with the others saying you need/should to buy books.. I think if you want to be a programmer, maybe then it'll help but if you just need to learn basic scripting stuff with simple games etc you'll be fine with the info that can be found from web.
Woah thanks for that link Ben. never knew about this, might want to try getting a vita haha.
You can always argue that such websites like:
http://www.dreamincode.net/
http://www.gamedev.net/page/index.html
http://www.w3schools.com/
will have enough resources to get you started.
To me they are resources but for absolute beginners who has no idea what the programming is may take a while for you to get around them and understand them for what they are. But it might work as well.
Heh, he may not be the only one. Let's just say it's a pretty safe bet that I won't be making the complete transition. At least not for a year or fifty.
Ah awesome, I do have a Vita yes. I'd heard about the dev program but I hadn't really checked it out. Could indeed be a fun way to get into things.
@Everyone else, thanks so much again for all the tips and links.
Does that rule out some of the C# MSDN / PS Vita stuff?
Personally I'm on a Mac and learning Actionscript3 for Flash/Air development atm. It seems pretty great for making games.
Yeah part of the reason I'm feeling inspired to get into it is because I picked up one of the IvyBridge MacBook Airs and having it so portable has got me wanting to use it as a little practice development machine to get started on since it feels more accessible and fun than sitting at my desk getting all 'work-like' about it.
Is Actionscript accessible as a beginner? I've heard Flash games are often a good way to get into game making.
Actionscript is definitely accessible as a beginner as there's tonnes of tutorials out for it and I would say resonates with other programming languages.
If you are looking to learn C# or C++ I believe that 3dbuzz is doing courses in both currently (they save the videos so you can view later). I haven't seen them yet, but I did like their introduction to UDK so I'd say it's something to look into, and unlike many of the other resources they'd have a context closer to what you're looking for.
The short answer is yes, though in many ways it's much more roundabout to get a game working in Actionscript than Unity.
You're basically starting from scratch and building up a game from there, though you don't have to go as low level as something like C++. Most of the really complicated things are taken care of for you already by the Flash player itself like rendering pixels to the screen, memory management, etc...
There are some code libraries which you can use to get a head start on game specific things such as Flixel and Flashpunk. But imho you still should start from the beginning with a programming language in order to really understand what's going on. It's very easy to copy/paste some code from a tutorial and have a game running. But it's like learning to draw by tracing someone else's drawing. Once you want to make something unique or even moderately different you'll be scratching your head without a clue on where to start. Once you've got the basics of programming down though tutorials are great for showing you how to do game specific things. At that point it's also probably a good idea to go with someone else's framework or engine since it saves you a ton of development time and you'll know how to modify it when needed.
Here's a copy/paste from a Google+ reply I made to a post asking What are all the new game developers using? which might give some insight into why I personally chose Actionscript/Flash development over Unity. If you're really set on 3D and not 2D games though I'd say go with Unity. Even then Unity is probably still a better choice for getting a game up and running fast.
Anyway heres the TLDR from Google+
As a complete beginner I'm both happy and frustrated to have so many choices of technology.
When I started learning programming again after over a decade of neglect I went from Python -> Java -> ?. Which is where I'm at now.
On the art side of things most of my experience in recent years had been creating 3D artwork for AAA games. Given what I know I could be using UDK with UnrealScript or Unity and C# seeing as I've heard that both UnrealScript and C# are similar to Java. However I really don't want to go down the 3D route for my first solo forays into game design. I have also always longed to return to pixel art which I got a taste of working on some failed cell phone and Nintendo DS projects back in the early-mid 2000s.
I'd like to be making web games. I like the idea of people being able to just click and play my games without needing to download or install anything. I also have this idea in my head that it's "best" to be as cross platform as possible which is pretty easy for web games.
I also would like to somehow be making a living off of game development (who doesn't?) which seems to lead to the mobile market, or possibly direct sales of downloadable PC/Mac/Linux games.
All of that led me to haXe, which theoretically would be awesome. The only problem is that haXe isn't very beginner friendly imho. There aren't very many learning resources available for it at all. Most of the people I see picking up haXe have solid backgrounds in Flash.
So taking a side step from back from haXe and looking around, all I see left that meet the requirements of what I really want to do are Flash, Unity, and possibly UDK.
Of course there's also JavaScript/HTML5, but as a beginner, again it seems to be more complicated than it has to be (at least for now.). I did pick up a license of Construct 2, but I'd really like to learn how to code my own games.
So at this moment I'm working on learning AS3 for game development. All the pieces I need or want seem to be there. I may decide to add Unity to my tool belt but I'm tired of false starts at this point so I'm going to leave it aside for now unless they add AS3 to JavaScript, C#, and Boo as one of it's languages.
I'm going to stick with Flash until I've got the basics of making games down cold and have something to show for it.
Honestly, once you have the logic down language becomes a preference. But some are better than others for games.
The performance benefit of C++ is unlikely to be needed since lone developers are not going to be able to churn out full AAA games on their own. Enough performance can be had with just about anything else these days.
I my opinion, the most important thing to have when making games on your own is quick iteration time. The speed at which you can implement changes to your game's design will directly determine how fun your game ultimately is. If your game isn't fun, no one will care about it but you. I don't think C++ is well suited to this due to the complex nature of the language itself.
However, there are benefits to C++ that I think are worth considering:
Cross platform for one, C++ can reach everything, even web games can be made with Google's NaCl (though they'd be limited to running in Chrome). Still though Unity, Flash, C# (mono), HaXe, and to a lesser extent Java, HTML5 (JavaScript), Lua, and Python are all viable alternatives to achieve cross platform games. Many are better at making browser based games as well. Why the emphasis on browser games you ask? Well it seems gamers these days have little patience. They want to be playing right away, each second that goes by from the time they decide to play your game to the time they actually are is a lost opportunity as they give up and move on to something else. Downloading and installing an exe (or even a plugin) often seems like too much effort for them. I think it's better to have your game loading, in their face, and ready to go as soon possible after they've clicked your link.
Access to a large and experienced development community. Just like learning Max or Maya for game art is much easier and better than learning say Cinema4D or Lightwave due to the community of artists, availability of quality learning material, and battle hardened plugins and scripts. The same is true of C++ over other programming languages.
Related to that is direct access to a large pool of high quality game libraries and engines. C++ wins here hands down I think.
I think eld, or Richard Kain can offer more insight into an artist learning C++ and making games with it. I've personally written off C++ for now due to the time I think I'd need to really get going with it, and for the OP TeeJay (who has even less experience) I think C++ would be too much of a barrier to entry.
Ben is right imo if you want to learn c++ and your a beginner learn c first. then lean c++. because you will not have to relearn anything that way. c++ actually has almost the full c language built into it. so you can actually write c programs in c++. for learning application programming it makes sense but for game programming i don't know. i don't really have an opinion on how to learn game programming.
c++ is awesome tho. ill be learning c++ for years.
Wow..
lol, you know the worst part is i'm starting to get a good grasp of c++98 then they come along and update c++ to c++11 and add a huge amount of new stuff. :poly124: so now its even more crap to learn. do i really need variadic templates??? i have no idea they don't even have any books yet available on c++11 its like the wild west.
Programming, its all about some simple logic's like math. 3D modeling,.. god..
If you are going to use Unity, you have to choose between unity script or c#, I think most unity programmers use unityscript, definitely more examples than in c#. But eh its pretty much the same, but it can be confusing as a starter to mix them.
There are a few books for programming in Unity, digitaltutors, 3dbuzz and youtube has some good tutorials. But wouldnt spend too much time on books, easiest way to learn unity is to start writing simple code. Moving cubes, changing colours etc and look at codes posted online, try to understand them. My first code was a calculator :P
And http://unity3d.com/support/documentation/ScriptReference/Transform is the site you should reading every day! The example code is very very helpful.
It's surprisingly relevant for me because this week I've been trying to make my first game in Unity. As I've gone on I've begun to realize more and more that it's just going to be 100% on me to get up to snuff on programming. I was hoping that the engine combined with visual scripting interfaces would get more of the job done than they actually can. Now I am going to just script everything. It's not a huge deal though as I've done a lot of scripting (even a bit of lua that made its way into one of the games I worked on) and some simple VB.net and Java programming ages ago. I can read and write the javascript and C# easily enough. Coming to grips with the 3d concepts and how to actually tackle the logic of the game mechanics is proving tricky though.
So you went for one in the end? How's she treating you? I wonder how much faster the Ivy Bridge versions are.
I'm thinking of getting into a little Unity development soonish, didn't know there was so much coding involved... at least to make a polished product. :poly117: Will start learning a little C sharp I guess... just as soon as I can figure out how to type the sharp symbol on this Mac Air keyboard
I really need to nail down my language of choice at this point I think. I still want to go the Unity route so with that in mind, I'm not sure. I see your points about C++ Ben, does the same apply to C#? The thing is, I'd rather get 'straight into it', starting with the target language rather than starting with C first etc.
Does that mean JavaScript or Python would be more accessible? Of the two, which would be a) the better choice for Unity and b) the better choice in terms of other uses (outside of Unity).
@Andreas - Yeah I sold my 2011 MacBook Pro 15 and bought a 13" IB Air and a 21.5" iMac. Best decision ever. I love both of them, especially the air, this thing is incredible! Definitely a lot faster with the IvyBridge and HD4000 graphics.
It was a bit of a gamble and seems backwards since the iMac is barely more powerful than my MacBook Pro was and the Air is much less so, but I just took a risk on the loss of performance and to be honest, it hasn't made any difference whatsoever, I can still do all the work I could before. I work as an arch-viz artist too and the couple of projects I've done since purchasing have gone great.
So yeah, new Air is highly recommended. And # is Option-3, I never needed it until I learned CSS and I thought there was no # key too!
I think you can't go wrong with either, Javascript or c# in Unity. They are both good and can be used to make any kind of beginner game project. When i started to learn coding i feel that i was learning more the logic behind it than the coding itself. So the problem usually was just to solve the logic what code to use and then finding help/ready script bits from Unity Scripting Refenrence / google / from other own scripts. (and definetly go with the "straight to the point" method :thumbup:)
You most likely wont be programming tons of lines of code by yourself. Most of the stuff can be done with couple of lines of code. And help/ready code with little tweaks can be found to probably 95% to the problems.
Just take it easy. I think if you just start to tinker with different codes and experiment stuff you realize it isn't rocket science afterall.
The problem is that Python isn't directly available in Unity, the closest thing is Boo. Were you to learn Python, I'm not sure exactly how much of that knowledge would directly translate to Boo.
JavaScript might be useful for you if you plan to do any serious website development, or if you want to make any HTML5 games from scratch (I don't recommend this path though...). You can even make scripts for Photoshop with JavaScript (you can also do that using Python with a few tricks).
C# is actually very good to know if you ever plan to go past Unity and start making your own applications or games without it. A lot of game making frameworks these days seem to be C# based like the PlayStation®Mobile Developer Program and XNA for XBox 360. It's a popular language for Tech artists to know for tool development as well.
The interesting thing about programming is that nearly all of the basic programming concepts are the same no matter what language you are writing them in. This makes it easier to learn multiple languages once you've gone deep enough with one of them. Syntactically they may be slightly to very different, but the basic concepts remain the same.
In my opinion as far as difficulty learning goes C# is a bit harder than Python and JavaScript.
Choosing which language to learn for Unity might really just come down to what learning resources you have available (books, tutorials, and people you can ask for help from), and which one "clicks" with you the best.
With only Unity in mind I think Boo is the clear loser since it's so rarely used, and you might end up trying to learn Python first which would slow your progress with Unity.
A bunch of Polycounters seem to be using C#, you might be able to get help from them.
When I first looked into Unity sometime in version 2, most of the tutorials I found were in JavaScript. I don't know if that situation has changed or not.
Don't worry about C or C++ neither of them will be of any use to you with Unity (though they are very useful for other things).
One thing you haven't really touched on though is if you especially have your heart set on making 3D or 2D games or it doesn't really matter.
If you don't mind being limited to 2D games, I hear Game Maker is also a very good introduction to well... "making games" (perfect product name...) and programming through it's own GML language. The neat thing about Game Maker is that you don't have to learn any programming to get started.
Another option is Stencyl which would get you into Flash games and Actionscript programming, I think.
If you weren't tied so much to Mac I'd recommend Construct 2 as well.
All 3 of those don't require programming to get started making games, but they are all limited to making 2D games.
EDIT:
I forgot to mention Game Salad as another tool that doesn't require any programming. I don't know anything else about it though.
I then went ahead with my(limited) knowledge and have done 2 games in unity with javascript(javascript complies as fast as C# in unity). Now i feel I have a pretty good understanding and of coding... but still a lot of the work is googling a specific function. SO get used to that
Here we go:
C++, a low-level language that has the potential for amazing speed and making you brain explode. It's what I learned first but I had a VERY good teacher. I would NOT recommend you to learn this by yourself.
Python, higher level and a fairly "loose" syntax since it doesn't have any curly brackets. I personally found it a little hard to get into, mainly because you can't do much without any libraries and I found finding and installing them kind of hard (personal). I would recommend python if you're a Maya user and want to script stuff in Maya.
Edit: Since you wanted more specific Unity advice, don't learn boo. It's not exactly python and there are hardly any tutorials for/with it.
Maxscript, I saw a mention. I like maxscript, it's fun to learn and max quickly becomes your playground. There's all kinds of stuff you can start manipulating right out of the box and the max help is quite elaborate as well. Not a programming language but could be a nice and easy start.
Javascript (web), for the love of god NO!
Javascript (UnityScript), I would probably recommend this to a complete beginner over C#. Files require less "stuff" and the syntax is slightly simpler.
Actionscript 3.0, don't bother with AS 2, it's old. I personally don't have experience with 3.0 but flash just gives you a blank canvas and 0 structure to make a game so it might be a little daunting to get started.
C# (Unity / XNA), my personal favourite. Since my basis is in the C family this comes very natural to me. C# can be very powerful and is a joy to work with (for me). It can naturally interface with the complete .NET library which makes it even more powerful and versatile. I've used it both with XNA and Unity and Unity is probably the way to go if you want to learn because it does all the annoying stuff for you.
Compared to Javascript it's strictly typed and requires you to learn a few more things before you can get started.
The hardest thing will be to not give up! I'm not sure how many programmers are on this forum but i'm sure a programming help thread will be tolerated in the techtalk forum and I'll help out whenever I can.
Good luck.
but then being strictly typed you get much better error checking and help from your IDE. One of my biggest leaps in speed was moving from maxscript to Java/c# and getting automatic code completion and error checking.
I completely agree about finding and installing additional Python libraries being kind of hard. It always seemed like such a messy process. Each time I installed something new it felt as if something was going to break really badly. I had completely forgotten about it.
There is The Programming/Scripting MASTER THREAD over in Technical Talk which I started the last time a discussion like this came up (though I haven't been maintaining it :poly136:).
To be honest you've got some great feedback in here though the one thing you need to remember is that the heart of programming isn't in the syntax but in the logic. (psuedocode and flow diagrams always help me) When I was messing about in WebGL, I had no freaking clue about javascript and documentation and google was my go to. I would say stop stressing too much about which language, just choose one and start making stuff Sure it won't look the best but in time you will build a knowledge in logic, flow, oop practices etc. (kind of like art haha)
Once you get the basics of a language down (especially something like java,C# or python) you can move pretty well between any programming language and probably would need like a 2 day primer on language dependent stuff. O and dont lose motivation! That's what I think a lot of people hate code, they don't understand it and stress about it and then don't come in with the right mindset.
I think I'll go with C# or JS based purely on how good I find the documentation/samples/tutorials/tips on each.
C# sounds a lot more beneficial in the long run since if I do get into this, I'd much rather be making apps and games than web stuff.
Absolutely! I kind of forgot about this since I mostly work in C#.
This is a HUGE plus and I would almost reconsider my previous recommendation of Unityscript. I still think the initial barrier is lower with Unityscript but moving on to C# will increase productivity / speed.
C# is a "real" programming language so I think you're right about it being more beneficial in the long run.
The thing you have to consider though is that you want to learn. I believe that you learn the best when you are engaged and preferably have some fun with what you're doing. The first few steps will be the most difficult and it's definitely not a bad thing to have a lower barrier of entrance (Unityscript) when learning.
After that, either as your unity language choice or as a bridge between python and learning one of the C languages, I'd say learn javascript. You can start learning the basics of javascript quite easy to learn with http://www.codecademy.com/ .
If you want to get into nitty-gritty graphics programming or writing an engine at some point, you will likely find yourself on the path to C++. I'm not there yet so you may want a second opinion, but python>javascript>C#>C++ seems like a good way to go.
My view:
Sure, python is a cool language and has tons of built-in sweetness but that's not the problem. The problem is that when someone wants to learn they should be able to focus and it should be as easy as possible.
I don't feel like python makes things easy, there's nothing visual that you can do out of the box and that makes it harder.
Even though we're talking about languages and their differences, that's not the point. It's about how you're gonna learn. Once you have any of them down moving on to another language will be fairly easy.
And seriously, don't bother with javascript as a language, it's shit. The unityscript is fine though, don't worry about that.
Python is a great language for learning to program. In my opinion learning to be a good programmer and the fundamental concepts should be the first priority before jumping too far into other languages. Python is great for that, and it doesn't force complex ideas like object oriented programming onto newbies right away. In fact part of the reason python's syntax is so great for a beginner is because it hides a lot of the oop and focuses on clean form rather than bracketing. (not to mention the infinite uses of python for any technical artist, in-fact the reason I learned it initially was for a job application.
Javascript is not useless by any means; it is actually very light and powerful, used all over the place, and becoming increasingly relevant. It also happens to be a great bridge into oop and the brace format, and a great precursor to a C language. The success and power of http://nodejs.org/ is one example of how javascript isn't something to overlook.
Python is a very good language to start imho. Some concepts translate well to other languages, some don't. But it's easy for beginners and quite forgiving. Using it for 3D work requires a bit more work though. You have to learn a UI framework and some MEL for Maya (or use PyMEL but it's slower). Some Maya stuff requires API calls and then you're in quite advanced territory already. However if you just want some apps with an UI (e.g. with Qt), it's fairly straight forward and there are many examples.
C# is a bit more complicated imho, but within Unity as framework it's easy and fun to pick up. Javascript examples from Unity translate very well to C# - I think there's even an online auto-translator. If you want to see some visual results fast, this is probably the best way to go. I know 3D artists who rarely did any programming (maybe the odd script here and there) and they all said it felt easy for them to pick up C# in Unity and produce working code / game parts.
ANSI C is fairly easy to learn, except for pointers. But the every-day usefulness isn't there. For anything remotely useful you want to go as far as learning basic / mid level C++. Then you can pick up a Framework like Qt and take it from there. Qt has many convenience classes so you don't need to get your hands dirty. If you used Qt in Python, you'll feel right at home when learning this part of C++ programming. That's the route I recommend people coming from other programming languages (especially Python) who want to try out C++ and get some results quickly. Or you get your hands really really dirty with windows programming... but this will probably scare you off from C++ for the rest of your life