Game development is the process of creating a fun interactive experience through software. Games are very inter-disciplinary in nature and require a varied skillset. This is a roadmap that jumpstarts you into indie game development.
1. Choose a game engine.
A game engine is the single most important software that aids game development. It brings together graphics rendering, physics simulation, particles, scripting, networking and everything else you can think of.
You can always make your own game engine from scratch. The biggest studios on earth, like Rockstar, Activision, Ubisoft, Valve etc., have the talent and manpower to create their own from the ground up. But for everyone else, the default option is to choose any one of the 3 popular game engines.
Criteria | Godot | Unity | Unreal Engine |
---|---|---|---|
Capabilities | Strong in 2D, but not as mature in 3D | Strong in 3D, arguably the best for 2D | Industry leading 3D, very basic 2D support |
Ease of Learning | Fairly easy to learn | Easy to moderate and extensive resources are available | Steep learning curve for the engine along with C++ with its own challenges |
Language | GDScript (similar to Python), C# | C#, Visual programming (not as good as Unreal Engine) | C++, Visual programming |
VR/AR Support | Limited | Extensive support | Extensive support |
Ideal for | Indie 2D games | High quality 3D, 2D, AR/VR and mobile games | AAA games, photorealistic visuals |
Official Site | godotengine.org | unity.com | unrealengine.com |
One more point that's not mentioned on the table is that Godot is entirely open-source meaning that you will never need to pay for anything, and your engine is entirely yours to modify and use however you want in your organization.
I chose Unity in 2020 and haven't switched to any other engine yet. Consider the above table but also make sure to do your research before choosing an engine as this is an investment of your time and effort that will go a long way.
Most basic-level game dev skills are transferrable between engines but as you go deeper and more advanced into an engine, your choice of engine will impact your projects more. For example, Unity makes learning and rapid development easier, whereas Unreal makes photorealistic visuals and implementing advanced features like motion matching easier. There are trade-offs for all.
If you're looking to dip your toes in game dev, I'd suggest picking up Unity simply because of
- The abundant learning resources available online
- And the highest return on investment for effort spent at the beginner-intermediate level.
2. Make a very simple game.
Next, with your chosen engine, follow a popular step-by-step course/playlist to make a simple game from scratch. This first game will get you familiar with the engine's workflow, how the engine thinks of different entities and objects within a scene, how to deploy a game to a platform etc.
This also teaches you general game dev concepts and terms like the update loop, delta time, collisions, trigger colliders, ray casting, lerping and so on.
More importantly, you'll learn about engine-specific APIs and methods that help you interact with input, physics, UI, animation, sound and other parts of the engine through code. This experience gives you the ability to experiment with the engine by yourself later on.
Throughout this process you will get familiar with managing assets in your project, and you'll also get familiar with the different file formats in a typical game dev pipeline.
Playlists I recommend:
This playlist (General Math for Game Developers) is more like reference material. You don't need to watch all of it. But this is what game programming related math is at the most basic level.
3. Asset Creation.
Assets are basically all non-code files in your project. Everything from plugins, 2D/3D art, audio, shaders, HDRIs, color profiles, all come under the banner of "assets". But generally speaking, people say "assets" to mean files that are not generated by your engine, meaning art, audio and video and stuff you have to manually import into your project. Most medium to large organisations have entire teams dedicated to asset creation whereas indie devs like to partially/entirely make use of pre-made assets from various sources online.
If you're looking to create your own assets, here are a few resources to get started.
-
3D art: Choose a 3D Modelling tool and get started with tutorials. Most major 3D modelling tools follow the same workflow. I recommend the open-source and yet, the industry standard tool - Blender
Shaders give life to models. A flat plane 3D model turns into an ocean using a shader, a group of randomly placed triangles becomes a patch of grass in the wind using shaders. For getting into shaders, heres some engine specific tutorials - For Unity, For Unreal, (Unity and Unreal both support HLSL, a language used for shader programming, and have their own GUI-node-based shader solutions)
-
2D art: Photoshop and other Adobe suite tools are the industry standard here. GIMP (an open-source photoshop alternative) is about half as good and covers basic use cases. If you're serious about 2D art, do look into drawing tablets too. Coming to pixel art, I recommend Aseprite. It's a great free tool and extremely fun to use. It has features that make it easy to export your art and animations to game engines.
The workflow for creating 2D/3D game art is slightly different from usual digital art. You need to consider factors like making your models optimized, consider Level-Of-Detail (LOD), choosing a color palette, keeping art style consistent for your entire asset library, etc.
-
Sound: Sound includes music and SFX (sound effects). For music creation, you have all the popular paid tools like FL Studio & Logic Pro X. For some retro music, check out Bosca Ceoil (an open-source music creation tool). For a look into game SFX and spatial audio, check out WWise and FMOD and their adaptive audio solutions for your respective game engine.
Finally, if you aren't too keen on working on sound design, you can just do the bare minimum. Simply adding some ambient noise and a footstep SFX will go a long way in adding to the user experience.
If your main interest lies in programming and you think you suck at art (✋) or don't want to do it, that's okay. There are millions of free assets out there that you can use in your game. Here are some sites I recommend:
NOTE: For games with dedicated artists, you can follow a specific art style, color palette and have a consistent look & feel because all these artists work together. This is difficult to do for indie devs without dedicated artists as they have to use pre-made common assets from different sources and achieve a consistent and unique look, so just keep that in mind when thinking about your art side of things. Also remember that art isn't everything, gameplay is the most important part after all.
4. Prototype, Experiment and Remake.
This is the most important stage of getting gud at game dev. In this step, it's all about gathering more experience with the engine and its various systems. Experiment with different platforms like WebGL, mobile and AR. Simply trying new things and playing around with the engine will gradually make you a much better game developer. Eventually you'll decrease reliance on end-to-end tutorials and turn to resources like documentation, GDC Talk, blogs and other projects.
You think some game mechanic you saw somewhere is intriguing? Try remaking it on your engine. Wall running
? Growing wheat
? Placing a C4
? Hijacking a car
? If you get stuck, watch a tutorial. Or browse online forums. Or read official documentation. Or join discord communities and ask other people. Or, finally, just grab a pen and paper and scribble away. There's always a lead to follow.
The system you're remaking doesn't have to be something big and complicated. Check out the little book on top of Minecraft's enchanting table, the way it opens up once you get close to it. Even that is a simple, yet completely valid feature to remake. And your final result doesn't even have to be a hundred-percent accurate replica of the real thing. Your prototypes don't always have to lead to fully polished games either. It's about the learning that takes place through creating prototypes and remakes.
It is important to get proficient in your respective scripting language. Learn to program better OOP, become familiar with common design patterns and where & why they are used. Learn about intermediate-advanced features of your language.
Videos / books I find interesting and related to this topic:
- Remaking Minecraft in 24 hours
- Giving personality to characters using Math
- HOW TO GAME JAM!
- Game Programming Patterns (🔥🔥🔥)
Besides these general resources, you must look for engine specific resources to learn more about how you can utilise your game engine to the fullest.
On that note, you should check out game jams. Game Jams are like hackathons but based around game development. You are given a time frame, a theme, some rules and some starting resources/assets to make the best game you can. itch.io is the best site for joining and even hosting game jams.
5. Design Philosophies.
Games are made by people who don't just play them but admire them as a technical, artistic and design marvel. This section is about studying games and learning what makes them "fun".
-
Low Level
You need to be curious about what goes on under the hood. This section is more code-oriented and is similar to low level system design but in the game dev context. These are some examples on how your thought process could be when you encounter intriguing mechanics.
Dishonored:
Stealth Security Guard AI
-> How to define a fixed path that the AI patrols (list of global positions) -> How to move AI Guard from one waypoint to another? (pathfinding algorithms) -> How to define the AI Guard's field of view and alert levels? (LLD system design) -> What is the minimum noise level that can alert the guard? (Sound system of your engine) -> How does the AI react when all hell breaks loose? (Testing edge cases) -> How to utilize state machines / behaviour tree patterns to design such an AI? (...)GTA:
Hijacking a car
-> How does the auto theft take place? (Multi-phase, randomized animation and can be "disrupted" at any point) -> How does the player's hand always reach the door handle accurately when opening a car door? (Inverse Kinematics) -> How does your player behave when they die? (Ragdoll physics) -> How is the game handling edge cases where I suddenly decide to switch characters during hijacking? (AI takes over) -> How is that AI designed? (....)Valorant:
Pheonix's flame wall
-> How are the starting and ending points of the flame wall decided? (Ray casts from the gun's muzzle) -> How is the curvature of the wall calculated? (Theres prolly equations that calculate it) -> What shaders and VFX (visual effects) go on the flame wall? (Combined work of the design team and technical artists team) -> How can particle systems associated with the flame wall be configured? (Think about various exposed engine methods available to you) -> How to detect any player entering the flame wall and subtract health from them? (check when player enters trigger colliders) -> How should other players in the lobby/network experience this wall? (...)Rocket League:
Car Physics
-> Whats the optimal physics update rate? (Because real-time simulations are discrete and require a time interval between each "update" call of the simulation system. This is true for physics systems too. For a fast-paced game like Rocket League, the physics update rate is a very important design and performance decision) -> Should my car have arcade physics where every aspect of the car (speed, turning radius etc.) is under my control through edit-able graphs and curves (like Mario Kart)? Or should it have realistic car physics done through proper simulation of wheels, engine, gearbox etc.? -> For more info on this stuff, check out this GDC Talk given by the developers of Rocket League themselves -
High Level
High level game design is concerned with concepts like the audio visual cues, feedback loops, environmental storytelling, tension curve design, difficulty curve design, color theory and so on. All of which are delicately balanced for a good game.
The Last Of Us: -> How does the player always know where to proceed? (Directing player attention) -> You see a zombie that's chained to the bed with a handwritten letter on the bedside table. What story does that tell? (Environmental Storytelling) -> The more you look around, the better loot you get (Reward positive habits) -> Repeatedly harming innocent characters (Negative feedback loops for undesired behaviours) -> You want the gameplay at the start of the game to be simple but not too easy/difficult. Similarly, you want gameplay at the climax to be complex with many variables, but it still shouldn't be too easy/difficult.
Valorant: -> Skill trees, agents and map designs are a complex eco-system. -> You don't want one character to be too overpowered. -> If you change something small like Sage's wall lasting 5 seconds longer -> Entire dynamic of the game is changed. -> Or if you alter the verticality of a bomb planting site by placing a bunch of wooden crates -> many existing strategies are now useless and new strats pop up.
Resident Evil 7: -> How often must the villain show up throughout the game? Too many appearances will desensitize player, Too few will make the villain a forgettable character -> How should the tension curve be? Start calm by exploring an abandoned house, gradually increase tension, let the player spot the enemy a few times, ramp up the music, let the player discover more clues, initiate a jumpscare and a chase, tension peak, then find justification to bring tension back down, only then move on to the next arc -> No one tension level must remain for too long
The next time you play any game, be observant towards the design aspect. Think of why the developers made certain choices over other possible choices. This is more of a study section than a practical section and will continue for as long as you play games. Here are a few channels/playlists whose content revolves around this topic.
- The Art of Game Design by Jesse Schell (available online) (🔥🔥🔥)
- Game Design 101 with GMTK (🔥🔥🔥)
- How it's made: Decoding game mechanics
- Level Design with Steve Lee
- Why this Half Life 2 level is peak game design from Valve
6. Specialize in whatever interests you
At this point, you have a good foundation in game development.
From here on out, you can expand out into anything that interests you. It could be game programming, design, computer graphics, music, art, or even super specific topics like level design, character controller creation, writing shaders, procedural animation, reactive AI, etc.
Learn general software development concepts like SOLID, design patterns and version control.
When you are serious about building a full game, look into how indie game developers build and retain fan communities for their games through low-cost marketing even before the game is halfway done. This translates to potential buyers (wishlists) on platforms like Steam, itch.io and Play Store. Look into the pricing and licensing policies of your respective game engine. (None for Godot of course)
One of the best parts about learning this skillset is that you can even put your game dev skills to use in non-game applications. Game engines aren’t just for creating games; they’re powerful tools for building immersive and interactive experiences across many industries. This opens doors to industries like architecture, education, healthcare, automotive, and beyond.
- Creating simulation apps for educational purposes for driving, flying and in the military. (Unreal Engine used for Simulation and Training at an yearly military conference)
- How Unity was used to make a realtime model of the Vancouver airport and of the Port of Antwerp-Bruges .
- Sebastian Lague is one such example of a person who uses Unity to do interesting non-game dev challenges like creating his own ray tracing implementation, simulating planet earth, procedural terrain generation etc.
- You can also create interactive experiences like product configurators that help businesses by letting users customize their product and view the changes in real-time before purchasing it.
- With all the money poured into blockchain in gaming, there are many opportunities to explore how blockchain can enable in-game economies and digital asset ownership.
The possibilities are endless considering how versatile game engines are.
Conclusion.
Game development is a vast and multi-disciplinary field that combines creativity and technical skills. Starting out can be overwhelming, but with the right approach and resources, anyone can create games.
Stay curious, keep experimenting, and most importantly, have fun with the process!