This is the long-awaited sequel to the Complete Unity Developer - one of the most popular e-learning courses on the internet. Completely re-worked from scratch with brand-new projects and our latest teaching techniques. You will benefit from the fact we have already taught over a million students programming and game development, many shipping commercial games as a result.
This is the long-awaited sequel to the Complete Unity Developer - one of the most popular e-learning courses on the internet. Completely re-worked from scratch with brand-new projects and our latest teaching techniques. You will benefit from the fact we have already taught over a million students programming and game development, many shipping commercial games as a result.
Unity is an incredible 3D package used for making video games, architectural and medical imaging and more. The challenge is that it's big and complicated to use, especially for complete beginners to coding and game development. We make learning to code easy and fun by leading you step-by-step through the process of creating exciting games.
Get plugged into our communities of amazing developers on Facebook (nearly 20k), in our own Teaching Assistant-curated Community, and our student Discord chat channel.
This course has full professional-produced English closed-captions.
If you're reading this you probably already have everything you need to get started. Unity is a free download. With regular access to an internet connection you'll be able to engage in our thriving community. Even if you have no experience with coding, or with 3D packages, we will guide you through everything from first principles. Starting slow, then building on what you learn, you'll soon have a very solid working knowledge of Unity.
Don't take our word for it, please see the amazing reviews students have taken the time to write. We are proud to be transforming lives, and equipping 1000s of people with valuable new skills. We would love you to become one of them now.
The course is project-based, so you will not just be learning dry programming concepts, but applying them immediately to real indie games as you go. All the project files will be included, as well as additional references and resources - you'll never get stuck. There are "talking heads", powerful diagrams, quality screencasts and more.
For each demo game you build you will follow this process...
Be challenged to build the entire game yourself.
Be shown step-by step how to build it.
Be challenged to apply, and re-apply your knowledge regularly.
Prefer to focus on 2D? Check-out our Complete Unity Developer 2D course. Want something a little more advanced? Check-out our epic Unity RPG course. Want to get certified, get a job, or learn environment art - we've got you covered. The green leaf logo is your sign of quality.
You will get full lifetime access for a single one-off fee. The creators are qualified and experienced coders and avid gamers, so are able to explain complex concepts clearly, as well as entertain along the way.
What this course DOESN'T cover...
Here are some things we will not be covering in detail...
Art asset creation (assets provided but not made on-screen).
Advanced performance optimization.
Editor plugins or modifications.
Physics engine modification.
Anyone who wants to learn to create games: Unity 3D is a fantastic platform which enables you to make production-quality games. Furthermore these games can be created for Windows, MacOS, iOS (even iOS 9), Android and Web from a single source.
Dive in now, you won't be disappointed.
In this video (objectives)…
Welcome to this Unity 3D course. The course starts off gentle and builds in difficulty. First section is set up and exploring, then we get into our first code, then more detailed game projects.
In this video (objectives)…
If you're experiencing issues with intelliSense not working, this guide will walk you through several steps to hopefully get things working.
In this video (objectives)…
Prefabs are an important part of Unity so its useful to understand how they work.
In this video (objectives)…
Its important to test that our environment works and that we can use code to drive our game. We print out a simple statement to the console to test that everything works fine.
In this video (objectives)…
We introduce the ways that you can get help, support and contribute to the community.
In this video (objectives)…
First look at this section's project - a simple sandbox where we make obstacles for the player to avoid and in the process learn C# and some basic Unity.
In this video (objectives)…
This game might seem simple but there are many small elements that will make it a fun sandbox experience for players.
In this video (objectives)…
We start the process of making our player move by using transform.Translate() to move on the x axis. We illustrate the difference between Start() and Update().
In this video (objectives)…
We discuss the concept of variables and look at the structure of creating a new variable.
In this video (objectives)…
SerializeField allows us to modify variables in the inspector. We add SerializeField to our variables in this lecture. We also create some new materials so we can change the colour of our player and ground plane.
In this video (objectives)…
We use Input.GetAxis to create a basic movement system for our player.
In this video (objectives)…
We use Time.deltaTime to make our player framerate independent. We also create a member variable to control the speed of our player.
In this video (objectives)…
We need a way to see our player as it moves around and Unity's Cinemachine is the perfect way to do so.
In this video (objectives)…
Collision is a fundamental aspect of most games. We look at box colliders and add a RigidBody to our player object.
In this video (objectives)…
Methods are how we make our code do specific things. This lecture looks at the concepts that are important for methods such as how to declare, how to call, syntax, what does return mean and what are parameters.
In this video (objectives)…
We create a new method and call it to print instructions to the console. We also refactor our movement code and create a new method for it.
In this video (objectives)…
We implement OnCollisionEnter() to print out information to the console when the player bumps into a wall.
In this video (objectives)…
We use GetComponent to access the wall's material and change the color when we bump into the wall with the player.
In this video (objectives)…
When we bump into a wall we want to penalise the player by increasing their score. We do this by creating a hits variable and using hits++ to increment the score.
In this video (objectives)…
For our new mechanic of dropping an object from the sky we need a timer. For this we are going to use Time.time.
In this video (objectives)…
To add a delay for our object falling we want to tell it to only fall if a certain amount of time has passed. For this we'll implement an if statement.
In this video (objectives)…
Caching is an important process to start practicing. In this lecture we cache the rigidbody and meshrenderer components.
In this video (objectives)…
Tags help us create more useful conditional statements. In this lecture we use tags to limit when behaviour will occur such as obstacles turning another colour upon collision.
In this video (objectives)…
Let's create some additional obstacles which spin using transform.Rotate().
In this video (objectives)…
Its time to get everything organised so that we're ready to make our level. We will organise our folders, add some extra obstacles and prefab everything that we can.
In this video (objectives)…
We bring it all together and use our obstacles to build an obstacle course level.
In this video (objectives)…
We've covered a lot in this section. Please do share your creation with the community
In this video (objectives)…
Project Boost is one of our community's favourite projects. We'll be increasing our C# and Unity knowledge and building a fun, highly customisable rocket game.
In this video (objectives)…
We lay out our gameplay screen and talk about the player experience for this project.
In this video (objectives)…
Onion Design is a great technique to use in order to prioritise our development.
In this video (objectives)…
We start our project and discuss our units of measurement.
In this video (objectives)…
Classes are an important organisational tool in C# programming. We talk about classes that we make ourselves and classes that Unity has already made for us.
In this video (objectives)…
We use the Input class to bind a key press to a log printed to the console.
In this video (objectives)…
Its time to make our rocket move. We're going to do this by adding force using the AddRelativeForce() method.
In this video (objectives)…
We need a way to run our rocket thrust that doesn't require fiddling with the mass of the rocket. To do this we add a tuning variable. And while we're at it, we may as well make our rocket thrust framerate independent, right?
In this video (objectives)…
To fly our rocket we need a way to rotate it, and to do that we'll use transform.Rotate().
In this video (objectives)…
We play with the rigidbody of our rocket, modifying the drag and gravity. We also fix some movement bugs that come from a conflict between our manual controls and Unity's physics.
In this video (objectives)…
We talk about what source control is and why use it. We also look at how you can access the repo used in this course so you can check your progress against what you see in the lecture, or clone the entire project.
In this video (objectives)…
We introduce how audio works in Unity. We also look at places where you can get or make sound effects and add our first sound effect (SFX) for our rocket.
In this video (objectives)…
We control our audio through code, allowing us to play the rocket boost when we push thrust and to stop it when we stop thrusting.
In this video (objectives)…
Switch Statements are a different sort of conditional and in this lecture we'll be using a switch statement to log out different messages based upon what the player has collided with.
In this video (objectives)…
When we crash our rocket we want to restart our journey. To do this we reload the Unity scene that is currently loaded using SceneManager.LoadScene().
In this video (objectives)…
In order to progress to the next level we'll need to be able to load the next level.
In this video (objectives)…
We want a slight time delay after we crash or make it to the end of our level. To do this we use Invoke(). We are also going to take away control from the player after the collision event has happened.
In this video (objectives)…
Our previous implementation of playing audio SFX was quite simple and not overly flexible. Now we'll trigger different audio clips to play from code based upon what event has taken place.
In this video (objectives)…
We need to stop our collision code from working during the time between colliding with something and loading the new level.
In this video (objectives)…
In this lecture we make our rocket look more interesting and learn a bit more about prefabs in the process.
In this video (objectives)…
When we bump into something in the world we want to give the players some feedback and a great way to do that is with particle effects.
In this video (objectives)…
In this lecture we link particles systems to our rocket booster.
In this video (objectives)…
In this lecture we clean up our code by using the extract method approach and make our Movement.cs script more readable.
In this video (objectives)…
It helps to be able to play your game quickly and easily. In this lecture we create debug keys for loading levels and stopping collision events.
In this video (objectives)…
Our level is pretty empty, let's add some geometry to give it some personality.
In this video (objectives)…
Lighting helps make our game world look more interesting, so in this lecture we add point lights, spotlights and alter our directional light to create a more interesting look.
In this video (objectives)…
We start the process of moving an obstacle back and forth. This will become an interesting tool for us to create challenges for the player.
In this video (objectives)…
Using the Mathf.Sin() function allows us to create a nice smooth animation for our moving objects. We can then tune the speed and vector that it travels back and forth.
In this video (objectives)…
We have a "not a number" error when we attempt to set period to 0 so in this lecture we will protect against that.
In this video (objectives)…
In this lecture we create a handful of levels and use the "moments" technique to come up with ideas.
In this video (objectives)…
When we play a build of our game we need a way to exit the game gracefully and we do that with Application.Quit().
In this video (objectives)…
To publish our game online or share it with a friend we fist need to build it. In this lecture we build a standalone build and a WebGL build and publish the WebGL build to sharemygame.com.
In this video (objectives)…
We've learned a lot in this section, culminating in building and publishing our game.
In this video (objectives)…
A quick introduction and overview of the Argon Assault Rail Shooter we'll be making.
In this video (objectives)…
This game will be a rail shooter using Timeline to drive the player around the maps.
In this video (objectives)…
We add a terrain to our project and use the basic terrain manipulation tools to create some shape to our terrain
In this video (objectives)…
In Unity 2020.1 the Terrain Tools package is a separate package to instal, so we'll be setting it up and giving ourselves more terrain options.
In this video (objectives)…
The asset store is a great place for finding assets for a Unity project. In Unity 2020.1 the workflow changed, so we learn how to use the package manage to import our assets.
In this video (objectives)…
Let's bring our terrain to life with some colours by adding textures.
In this video (objectives)…
Trees will make our terrain feel more organic and lively. In this lecture we import and add trees to our world.
In this video (objectives)…
The key mechanism we use to drive around our player on the rail is Timeline. In this video we get that structure set up.
In this video (objectives)…
To create interesting moments in our rail shooter we place enemies that will fly in front of the player.
In this video (objectives)…
We need to have a nicer player ship to be flying around so lets import a great free asset to use.
In this video (objectives)…
The foundation for Unity's "old" input system is GetAxis(). We'll be using this to set up the basics for our player movement.
In this video (objectives)…
We look at a very basic implementation of Unity's new input system.
In this video (objectives)…
The first steps in moving our player is to programmatically have it move gently from left to right across the screen.
In this video (objectives)…
We need to use the xThrow and yThrow that we are accessing from player input to move the player's ship up/down/left/right.
In this video (objectives)…
Our ship can go off the screen at the moment, we want to restrict its movement so that its only possible to go to the edge of the screen. We use Mathf.Clamp() to do that.
In this video (objectives)…
There is a lot going on when we rotate a game object. We start the process of implementing Quaternion.Euler() to accurately rotate our player ship.
In this video (objectives)…
We link our player's screen position and their control throw to the rotation of our ship.
In this video (objectives)…
We need more rail and need to improve the feel of our controls. Now is a good time to do some tuning.
In this video (objectives)…
We start the process of setting up our laser bullets by using Unity's particle system to create our lasers.
In this video (objectives)…
Nested prefabs give us a lot of flexibility but also create some challenges. In this lecture we understand nested prefabs by working through some examples.
In this video (objectives)…
We need to set up the mechanics for firing so that when we push a button, our ship is ready to shoot. We'll implement the old system and also touch on how to do this in the new system.
In this video (objectives)…
We want to access all of our ship's lasers and to do this we set up an array and use a foreach loop to cycle through all of the lasers in our array.
In this video (objectives)…
Instead of turning on and off our game object we instead need to stop the particle system component's emission.
In this video (objectives)…
To organise our code better and make life easier for our designer-brains, we can use tooltips and headers.
In this video (objectives)…
We explore the collision matrix and understand the difference between triggers and collisions and how to use them properly.
In this video (objectives)…
In this lecture we make our lasers bounce all over the place and also shoot and destroy our placeholder enemies.
In this video (objectives)…
Now that we are registering the crash, lets restart the game when the player is triggered by an object in the world.
In this video (objectives)…
The player needs visual feedback that they have collided with something, so we need to create an explosion particle effect.
In this video (objectives)…
In this lecture we trigger the particle effect explosion and make the player ship disappear.
In this video (objectives)…
To create our enemy explosions we'll use Instantiate() to create them at runtime.
In this video (objectives)…
When we want one class to influence another class we can create a public method to allow the 2 classes to communicate.
In this video (objectives)…
As a starting point to displaying our player's score on the screen we'll be creating a Text Mesh Pro UI text and adding some spiffy font to it.
In this video (objectives)…
To display our integer in the text box we first need to use ToString() to convert it to a string.
In this video (objectives)…
So that our enemies aren't just one-hit to destroy, we'll be implementing a simple hit point system.
OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.
Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.
Find this site helpful? Tell a friend about us.
We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.
Your purchases help us maintain our catalog and keep our servers humming without ads.
Thank you for supporting OpenCourser.