
In this video (objectives)...
Welcome to the course!
In this lecture we download the software we’ll be using in the course.
Let’s start playing around with Unity and getting familiar with the interface.
We need to do a quick bit of coding to make sure that our coding environment is set up properly and ready to go.
Let’s kick off this project!
In this lecture we introduce methods and take some time to understand the difference between the Start() and Update() callbacks.
In addition to rotating our object we want to move it forwards. We'll do this by using Tranform.Translate().
Variables are a critical element to any programming that you’ll do so in this lecture we'll discuss how to use variables and specifically how to type them in C#.
To make our game easier to tweak and tune we can add SerializeField as an attribute to make our variables visible in the Unity Inspector.
In this lecture we want to see if the player has hit a particular key on the keyboard which means talking about input and introducing if statements.
Its time to make our vehicle respond to player input. We'll be adding a couple of extra variables so that we can move our car while playing the game.
Currently our game will work differently on everyone's computer because its not framerate independent. We use Time.deltaTime to make our car drive in the same manner on all computers.
To change our game from basic images moving around to objects which can bump into each other we need to understand Colliders and Rigid Bodies.
When we bump into things we can make other things happen in our code using OnCollisionEnter2D().
If we want to make things happen in our game when we pass through an area or through another object we can use OnTriggerEnter2D().
Cinemachine is a package that we add to Unity that allows us to do all sorts of magical things with the camera. In this lecture we quickly and easily implement a simple follow camera.
Let’s import some spiffy looking assets and have a conversation about the unit of measurement in Unity.
It’s time to make our car look like a car and experiment with tiling a seamlessly tiled background.
Let’s create a simple level, either by building it with pieces or using the one example layout.
We can implement collision in a couple of different ways to stop the player driving over houses and fences, let’s discuss and implement our collision.
Tags is one system that can be used in Unity to identify objects. In this lecture we set up some tags to use with our game objects.
Bools are a type of variable that show us if something is true or false, let’s implement some bools and play around with them.
Prefabs provide a lot of functionality and are a building block within Unity. In this lecture we touch on a very simple use of prefabs that let’s us re-use our assets in our scene.
Destroying objects cleans up our game world and let’s us make pickups disappear after we drive over them.
GetComponent is a method used to access the various components on a game object so you can then adjust or alter aspects of your game object.
Let’s implement a system to make the player speed up and slow down by picking up boosts or bumping into our collision walls.
In this lecture we add a text mesh pro text object to display the word “Boost” on the screen when we are boosting.
Well done on completing the Delivery Dash project.
In this video (objectives)...
Welcome to the Snow Surfer section!
In this lecture, we’ll go over the game design and what to expect for Snow Surfer!
In this lecture, we’ll set up our project and begin working on our level using Unity’s Sprite Shapes.
In this lecture, we’ll see how to add an Edge Collider around our Sprite Shape so it can interact with physics objects!
In this lecture, we’re going to learn what Cinemachine is and how to use it to follow our rolling ball.
In this lecture, we’ll set up our player character while learning a little about parent/child relationships.
In this lecture, we’ll use a Surface Effector 2D to push our player along the surface of our sprite shape.
In this lecture, we’ll learn how to use Unity’s modern Input System as well as variable scoping and using Vector2 variables.
In this lecture, we’re going to make our player rotate when pressing left and right using the AddTorque() method!
In this lecture, we’re going to be setting up a finish line and crash detector, which we’ll use to restart the level later.
In this lecture, we’ll learn how to manage our scenes and use the SceneManager to restart the level, as well as how Namespaces work and how they organize our code.
In this lecture, we’ll use Invoke() to wait for a specific amount of time before restarting the scene.
In this lecture, we’ll create particle systems to add some cool visual feedback when the player crashes or passes the finish line!
In this lecture, we’ll trigger the particle effects we made last video whenever the player crashes or reaches the finish line.
In this lecture, we’ll make some general improvements to our game by tweaking the level and adding some background sprites.
In this lecture, we’re going to use the FindFirstObjectByType method to get the surface effector, and use it to boost the player when pressing up!
In this lecture, we’ll create snow particles that play and stop whenever the player touches and leaves the floor, using the OnCollisionExit() method.
In this lecture, we’re going to learn how to use access modifiers to stop the player from being able to move after crashing.
In this lecture, we’re going to calculate the number of times the player has done a flip by understanding more about rotations, and using Mathf.DeltaAngle()
In this lecture, we’ll learn how to use function parameters to update our score along with an in-game score counter text!
In this lecture, we’re going to import a custom font in Unity to make our score text look nicer!
In this lecture, we’re going to use ScriptableObjects to keep our data separate from our MonoBehavior scripts!
In this lecture, we’ll activate a powerup as soon as the player touches it. Also, we’ll learn how to return variables from methods to provide better encapsulation.
In this lecture, we’ll create a timer to count down the seconds in our powerup, then deactivate them when time runs out.
In this lecture, we’ll create a particle system that plays when the player is powered up!
In this lecture, we’ll learn the basics of how to use anchors & pivots to help our UI stay consistent when changing the aspect ratio!
In this lecture, we’ll learn how to add buttons and use layout groups to create a character selection UI.
In this lecture, we’ll wrap up our character selection UI by using button OnClick events!
In this video (objectives)...
Congratulations on finishing the Snow Surfer section!
Welcome to this section where we make a side scrolling 2D platformer.
In this video (objectives)...
In this lecture we import and slice up our sprite sheets
In this video (objectives)...
Tilemap is a very powerful 2D tool. In this lecture we have our first look at what Tilemap can do.
In this video (objectives)...
For our tilemaps to display correctly we need to set up some way of having them sort on top of each other.
In this video (objectives)…
Rule tiles are a spectacular time saver and a definite must for all developers to understand if they are using tilemap.
In this video (objectives)...
Let’s make our player do a bit of a jiggle while it is in idle state.
In this video (objectives)...
To move between animation states we need to understand how to trigger transitions.
In this video (objectives)...
Our tilemap platforms need collision and we set this up with composite colliders.
In this video (objectives)...
Let’s take the first steps needed to control our player by setting up the input system.
In this video (objectives)...
In this lecture we create the logic for our character to move left and right.
In this video (objectives)...
Let’s make our player look in the direction they are running.
In this video (objectives)...
In this lecture we’ll set up our code so that our character transitions between states based upon player input.
In this video (objectives)...
Time to start jumpity jump jumping around!
In this video (objectives)...
We need to test if the player is touching the ground and only let them jump if they are properly grounded.
In this video (objectives)...
Ladders were meant to be climbed, so let’s get our player climbing some ladders.
In this video (objectives)...
In this lecture we fix the issue where the player slides down the ladder if they aren’t running up it.
In this video (objectives)...
Now we need some spiffy climbing animation and will hook that up in this lecture.
In this video (objectives)...
In this lecture we’ll set up a cinemachine follow camera so that we can bounce around the level and follow the player.
In this video (objectives)...
To stop the camera going to places it shouldn’t we’ll set up a cinemachine confiner.
In this video (objectives)...
Cinemachine gives us some impressive functionality, one of which is being able to change to difference cameras based upon the player’s state.
In this video (objectives)...
We need to make our mushroom bouncy and our player slidey and that’s what we’ll be doing in this lecture.
In this video (objectives)...
In this lecture we’ll set up a system stop the player jumping off walls.
In this video (objectives)...
In this lecture we start the process of creating an enemy for the player to avoid.
In this video (objectives)...
We want the enemy to change directions when they reach a wall and to do that we’ll be using the little known “reverse periscope” technique.
In this video (objectives)...
It’s time to implement some consequences for bumping into enemies.
In this video (objectives)...
In this lecture we’ll be working within the animator controller to properly set up the dying state.
In this video (objectives)...
Hazards are a staple for any 2D platformer, so in this lecture we’ll be setting up some nifty spikes.
In this video (objectives)...
Shall we make our player shoot bullets? Why not. To do this we’ll need to use Instantiate() to create bullets when we shoot.
In this video (objectives)...
The best sort of bullets are ones that fly across the screen in the direction we’re point, so that’s our goal in this lecture.
In this video (objectives)...
Platformers need some sort of coin pickup so let’s add one of those to our game.
In this video (objectives)...
Sound effects help give life to our game. In this lecture we add a very simple sound effect implementation for picking up the coin.
In this video (objectives)...
In future lecture’s we’ll be loading from one level to another so we need to build some different levels to use for that purpose.
In this lecture we implement level loading to jump from one scene to the next.
Coroutines are an important tool that allows us to add delays in our game.
In this lecture we’ll set up a simple singleton pattern that allows us to make sure there is only 1 instance of a particular game object.
The Game Session Controller will be responsible for keeping track of our lives and score.
Let's add some UI to present our remaining lives on the screen.
Next up we’ll be updating the score UI on the screen.
The make sure that coins and enemies behave properly when we die or restart the game we need to set up a Scene Persist Singleton.
Prefab variants are a super useful way to create differences and variation in our objects without losing the control to make broad changes to all objects. Let’s explore prefab variants.
Well done for finishing Tilevania!
In this video (objectives)…
Welcome to Star Blaster!
In this lecture, we’ll go over the game design for Star Blaster and break down all the mechanics we’re going to implement!
In this video (objectives)...
Let’s set up our project by importing our assets, setting up our layout, and creating basic prefabs to use in future lectures!
In this video (objectives)...
In this lecture, we set up our player’s movement by editing transform.position directly!
In this video (objectives)...
In this lecture, we’ll create boundaries for our player to stop the ship from moving outside the camera.
In this video (objectives)...
In this lecture, we’ll set up waypoints for our player to follow, then learn how Arrays work - which are a very important programming concept!
In this video (objectives)...
In this lecture, we set up the wave config script as well as learn how for loops work to easily iterate through an array.
In this video (objectives)…
In this lecture, we’ll set up the enemy pathfinding script to move enemies from waypoint to waypoint!
In this video (objectives)…
In this lecture, we’re going to create a new script that instantiates enemies at runtime!
In this video (objectives)...
In this lecture, we learn how to use Coroutines to tell a method to wait for some time, as well as how to use Foreach loops to more easily loop through an array. We use these new techniques to loop through each wave and spawn enemies inside with a short delay!
In this video (objectives)...
In this lecture, we’ll learn how to use while and do-while loops in order to repeat all of our waves indefinitely!
In this video (objectives)...
In this lecture, we’ll create health and damage dealer scripts to easily take damage and get destroyed once a ship’s health reaches zero!
In this lecture, we’ll set up our player & enemy projectiles, as well as new collision layers to stop them from colliding with friendly ships.
In this lecture, we’ll learn how to start and stop coroutines to make our player shoot projectiles and destroy those pesky enemies!
In this video (objectives)...
In this lecture, we’ll learn how to make our enemies shoot back at the player by adjusting the Shooter script.
In this video (objectives)...In this lecture, we’ll set up a parallax background - which is a background that has different layers to simulate depth!
In this video (objectives)...
In this lecture, we’ll create some explosive particle effects that play whenever a ship gets hit!
In this video (objectives)...
In this lecture, we’ll apply some screen shake when the player gets hit, in order to provide some powerful feedback for the player!
In this video (objectives)...
In this lecture, we’ll add some sound effects and play them through an AudioManager class rather than attaching an audio source to each object.
In this video (objectives)...
In this lecture, we’ll add some music to our game and clear up some popular audio terms used in Unity.
In this video (objectives)...
In this lecture, we’ll add a new script to keep track of score and gain some score upon destroying an enemy!
In this lecture, we’ll set up the shape and look of our game’s UI!
In this lecture, we’ll update our game’s user interface to match what’s happening in the game.
In this lecture, we’ll set up our Main Menu and Game Over scenes.
In this lecture, we’re going to create a level manager that allows us to move from scene to scene!
In this lecture, we’re going to learn what the Singleton Design Pattern is, and how we can use it to create an object that persists throughout the entire game!
In this lecture, we’re going to turn our ScoreKeeper into a singleton, and show the final score in the GameOver scene.
In this lecture, we’re going to add some finishing touches to our game, and finally build it so that others can play it outside of Unity!
In this video (objectives)…
Congratulations on finishing the Star Blaster section!
In this video (objectives)…
Well done on completing the course!
Thank you to all the amazing people who backed us during our Kickstarter!
Unlock the Game Developer in You with the Complete Unity 2D Developer Course - now being remastered in Unity 6!
Ready to make your own video games? This course will take you from total beginner to building your own 2D games using Unity 6, the world-leading game engine used by studios and indie developers alike.
Whether you're new to coding, game design, or both — we’ll guide you step-by-step through the process using Unity’s latest tools and features. You’ll build four complete games, learn C# programming, and develop the confidence to create your own games from scratch.
Games You’ll Build:
Delivery Dash – Steer your way through challenges in a fun driving game.
Snow Surfer – Carve the slopes in a side-scrolling adventure.
Jump Mania (coming soon) – Navigate perilous platforms in a fast-paced platformer.
Star Blaster (coming soon) – Blast through enemies in a space shooter that’s out of this world.
All project files and assets are included, with plenty of support so you never get stuck. You’ll be writing real code with C#, gaining a solid foundation in object-oriented programming, and learning how to apply game development principles the right way.
You won’t just watch us build — you’ll try it yourself first, then follow along as we walk you through each step. It’s a hands-on learning experience designed to make the lessons stick.
You’ll also join a global community of game developers, with friendly help available in the Q&A, course forums, and beyond.
Who This Course is For:
If you’ve always wanted to make games but didn’t know where to start — this is it.
Perfect for:
Complete beginners
Artists looking to bring assets to life
Coders curious about game development
Anyone with a love for games and a desire to create
With lifetime access, expert instruction, and a growing library of content, this course gives you everything you need to start your journey as a 2D game developer.
Don’t just play games — make them. Enrol now and start building with Unity 6!
Note: This course is currently being updated to Unity 6.
You’ll find both the new content and the original course material included. Once the remaster is complete, the original content will be moved to a separate archive course, which you’ll continue to have full access to.