If you understand Joe’s advice already and get why it’s valuable to start small, trust me when I say that you are already way ahead of a lot of new Unity developers!
When it really comes down to it, there’s no wrong way to make your first game. You certainly could take on a grand-scope, enormous MMO-RPG-FPS-MOBA, and you’d definitely learn some things along the way. The problem is you’re fighting for every scrap of progress you make, and a lot of it turns out to be unusable because it’s beginner code that would be tough to scale and maintain.
So the advice for small games helps push you in the direction of figuring out the “wrong” way to make things first, in a small enough project that you can still finish the game. And you still learn something, too!
As far as using tutorials… It’s not that tutorials are bad or anything. I use them all the time when I’m exploring concepts that are new to me. But I wouldn’t go into it saying “I’m going to make a Flappy Bird clone”, find a Flappy Bird tutorial, follow along, and call it a day.
If you want to gain actual, useful experience for what it’s like to make a game, sit down and think through the project yourself first. Consider trying to flavor the game in some way to add your own spin to it, including art direction, a bonus game feature, etc. Example:
- Concept - I will create a “Flappy Bird”-like game with a key difference being the player can move directly forward for a brief time when holding the Jump button. This would be a short “boost” that lasts for short periods based on a cooldown meter. Maybe there are power-ups?
Just a really basic mission statement of sorts for the game to keep you on track. You should feel free to remove stuff from this as you go, but carefully consider adding anything, and weigh the potential scope increase it would entail.
Next decide the general direction kind of stuff.
- Platform - I will build a desktop (PC) version as my main goal. I may try building a Mac version and test on my brother’s MacBook, if he’ll let me. WebGL could be a good candidate as well.
- Art - The main character will be an anthropomorphic rocket. The environments will be space-themed, with aliens, orbital structures, and debris as obstacles. I will draw all the art myself in Paint, or use free assets from the Asset Store when appropriate.
- Sound - I should probably have music and sound effects. This seems like a low priority though and I’ll look into it once I’m done with the main portion of the game.
- Story - Implied through the characters and environment. No story elements necessary.
At this point, consider technical needs you may have, such as what kind of systems you’ll need to create / acquire to complete your concept.
- Controls - The player controls their character by clicking or click-holding the screen. They could also use the space bar.
- UI - I’ll probably need a main menu. Maybe a pause menu when in the game, too. Options? For turning off music and SFX and stuff?
- Save system - The player starts over each game, but the game should keep track of your highest score.
- Randomized levels - The game should be different each time you play. I’ll need to figure out how to randomize the placement of obstacles and powerups.
- Network - The game will be singleplayer, so no networking should be necessary. What about achievements? How do they work? Should I have those? Research this more later.
Once you get that list done, it might be a good time to go back through everything you have so far. Weigh things for importance, and DO NOT BE AFRAID TO CUT BACK. Remember the main point of the exercise: to learn and finish the game.
Okay, so it’s time to get started. Break things down from big concepts you don’t know how to do:
- Generate an infinite number of random obstacles scrolling across the screen
to lists of simpler concepts you already know, or can figure out how to search/learn:
-
Select a random object from a list of objects
-
Use a script to instantiate a prefab on the screen
-
Make an object move from right to left and disappear once it’s out of view
-
Detect when an object collides with another and end the game if it’s the player
Approach your tasks one by one. Take comfort in knowing that for each item ticked off your list, not only are you learning stuff you didn’t know before, you’re getting that much closer to making a complete game!
As you grow and develop, you’ll eventually get to the point where you look back at some or all of what you made and think “This is garbage! I could write this so much better now!” This is a milestone, and means you have several options:
- Continue on. Finish the game and do it better next time.
- Rewrite the crappy portion. Great exercise, but can sometimes get you stuck in an infinite loop, if you’re learning enough.

- Scrap the game. Either start over from nothing or move on to the next project. You shouldn’t do this too much, or you end up like me with 30 incomplete projects on your hard disk and not much of a full portfolio. But if you feel like you’ve learned something and would rather move on to another set of tasks, there’s no shame in canceling a learning project. Having fun while you’re working is important early on, so don’t burn yourself out by forcing yourself to do stuff you don’t enjoy.
If/when you get yourself to a completed or nearly completed game, do a bit of testing. Try to break the game. Identify those bugs, and fix them. Hand the controller off to a friend or family member, and have them play while you sit silently and watch. See what things work and don’t work for someone not intimately familiar with the game, and address those issues as needed.
That’s kind of it! At this point you’re either ready for the next project, or – if you’re really proud of this one – you could release your game! That’s a conversation for another time though, when I’m not already up an hour past my bedtime.
Good luck, and have fun!