In this course, we’re going to be making a 3D physics-based 8-ball pool game using Unity. With that said, the ultimate goal of this course is not to show you how to make an eight-ball pool game per se, the ultimate goal is to use it to help you learn the basic principles of game-making in Unity that will enable you to create your own games.
One of the prominent features of our game is a real-life physics simulation.
In this course, we’re going to be making a 3D physics-based 8-ball pool game using Unity. With that said, the ultimate goal of this course is not to show you how to make an eight-ball pool game per se, the ultimate goal is to use it to help you learn the basic principles of game-making in Unity that will enable you to create your own games.
One of the prominent features of our game is a real-life physics simulation.
In other words, in the game that we will be making in this course, the player will be able to make jump shots, that make the ball bounce off the table; and swerve shots, that make the ball move in a curve.
Another distinct feature of our game is a pretty hard-to-beat AI player. What’s important about the AI part is that while working on it, you will learn how to code complex data-driven game logic, which is a pretty valuable experience.
In this course we will not only show you how to just make a game in Unity but we will show you how to make a publishable mobile game. The eight-ball pool game that we will use as an example in this course has been published on both Apple’s App Store and Google’s Play Market and we will be making this game with an ultimate publishing goal in mind so that you can get the full experience.
And finally, since we aim to show you how to make a publishable game, we will also show you how to incorporate basic monetization by integrating ads into our project.
Alright, again, in this course, we’re using eight-ball pool as a learning example, to teach you transferrable skills that you can apply to any other game that you might want to make.
In order to achieve that, we provide what I like to think of as exhaustive explanation, while in reality, for some of you, it might be exhausting explanation. Therefore, the first chapters of this course have two versions of the same lesson, one with detailed explanation, and one with very little explanation.
We call them the Fast Track and the Learning Track lessons. So if you already have some experience with Unity, you might want to go for the Fast Track lessons, and switch to the Learning Track when you feel like you might need additional explanation.
Another feature of this course is based on the idea that learning is never a straight path, meaning quite often when we bump into something new, we cannot fully comprehend it as it requires additional knowledge and practice to become fully palatable.
So, throughout the entire course, we will be guiding you back to the previous lessons and we encourage you to actually do so. To help you navigate through the course, we have Glossary that contains descriptions of important concepts that you need to know to feel more comfortable with Unity. The Glossary also contains a list of references where the concepts are being explained and applied. In addition to Glossary, in some lessons, we also provide links to our YouTube videos that can give you additional information related to the lesson
Now, this course is designed for people with no experience with Unity. Zero
However, if you’re new to programming in general and if you’re not familiar with object-oriented programming, we recommend that you check out our YouTube channel first.
The main reason why we’re not covering programming in general in this course is simply because Unity is not a good choice for that.
However, this doesn’t mean that this course is not a good fit if you’re completely new to programming. Just go over the videos that we have on our YouTube channel, and you will be fine.
Another feature of this course is the prototyping approach. Even though we’ve made and published the game before we started working on this course, we decided to show you a somewhat more natural process of game development where we start simple, with primitive graphics and simple functionality and expand our project throughout the course.
For example, instead of spending a lot of time perfecting the game controls or the UI, we first create a more primitive version and then polish them in smaller increments. And as we do that, we show you how to fix common bugs and address larger issues that arise when you expand your project.
We believe this approach is more beneficial for learning as the experiences you get in the process will enable you to address similar issues in other projects that you might be interested to be involved in in the future.
*Billiard Table Vectors by Vecteezy
In this video, we will explain why you might want to choose our course.
In this video, we will get started by downloading and installing Unity.
In this video, we will create a Unity project for our game. We will also start familiarizing ourselves with the interface of the Unity Editor. In addition, we will learn how to import and modify 3D assets in Unity; and work with materials. And we will do all that while setting up the pool table for our game.
In this video, we will create a Unity project for our game. We will also add a pool table asset to the project and set up its material.
In this video, we will set up the main camera for our game, and talk about how camera works in general. We will also talk in more detail about the Transform component, about Position, Rotation and Scale. In addition, we will talk about screen resolution and aspect ratio, which are very important concepts for game-making.
In this video, we will set up the main camera for our game.
In this video, we will continue talking about editing scenes in Unity. We will also introduce a new big concept, which is the Pivot Point. And we will do that while adding a cue stick to our project and adjusting its position and rotation relative to the cue ball.
In this video, we will add the cuestick to our game.
In this video, we will talk about game design in general, and the design of our specific game.
In this video, we will add code to our project, and we will start off by adding code that rotates the cuestick around the cueball on mouse drag, to allow the player to aim a shot.
In this video, we will do a bit of code refactoring, talk about caching, structs, enums and some other stuff. We will also learn about two types of coordinates spaces in Unity, namely Local space and Global space.
In this video, we will refactor that code to make it a bit less weird.
In this video, we will further modify our code to make the cuestick rotate on mouse drag. Specifically, we will have the cuestick rotate clock wise when we drag the mouse to the right or down; and counter clock wise when we drag the mouse left or up.
In this vides we will do a bit more of refactoring by splitting the code we have into two parts. We will also talk a bit about software design and architecture, specifically about some principles of organizing code.
In this video, we will write the elevation controller; and we will have the cuestick object change its elevation in the scene as we adjust it using the controller.
In this lesson, we will add a slider that will allow the player to adjust strike power and hit the cueball with the cuestick. We will also talk about Unity’s UI system and using interfaces in C#.
In this lesson, we will add a slider that will allow the player to adjust strike power and hit the cueball with the cuestick.
In this video, we will add colliders to the table and the cueball in order to enable Physics behavior.
In this video, we will connect the game logic to the rest of the game using game events.
In this video, we will write code to make the cueball move when we strike it with the cuestick.
In this video, we will tweak the Physics Engine settings to make the cueball bounce off the rails.
In this video, we will write code for the spin controller and have the physics engine apply spin to the cueball based on the spin controller
Now that we have some basic physics, we’re gonna tweak the existing game controls and we will start from adjusting cuestick rotation.
In this video, we will add another ball, an object ball to test the physics of the ball-to-ball collision. In addition, we will add an aim line that will help us aim a shot; and also we will talk about materials and shaders.
In this video, we will continue expanding our UI, specifically, we will add functionality that will allow the player to reposition the cueball on the table.
In this lesson, we will fix a few issues related to the cuestick anchor object not having the same position as the cueball.
In this lesson, we’re gonna fix some issues related to repositioning the cueball
In this video, we will add additional UI elements that will allow the player to adjust the elevation angle for the cuestick and apply spin to the cueball.
In this video, we will do a bit more of UI programming to have the pop up panels for cuestick controls disappear under certain conditions.
In this video, we’re gonna continue working on applying spin to the cueball. We will also tweak some game controllers to make it easier for us to test the new features.
I this video, we will complete the functionality related to game logic and then we will fix some bugs in the game logic.
In this lesson, we will complete the cuestick elevation part of the game by enabling jump and swerve shots.
In this video, we will start working on racking object balls and then breaking the rack, specifically, we will replace some of the assets with new ones.
In this video we’re gonna make our game rack the object balls on the table.
In this video, we're going to move on to tweaking the breakshot to make it a bit less boring.
In this video, we will do some visual polishing to make our game a little comfortable to play.
In this video, we’re gonna continue polishing our game to make it easier to aim a shot.
In this video, we're going to make sure our game supports various screen resolutions.
In this video, we will add a touch controller to our game to be able to test it on an actual mobile device.
In this video, we will build our game to an Android device to test it.
In this video, we will build our game to an iOS device to test it.
In this video, we will start working on the game logic for our game.
In this video, we will outline the logic of the Breakshot phase by making a flowchart diagram.
In this video, we will continue writing code for the game logic.
In this video, we will complete the part of the game logic responsible for handling the fouls that happen while the balls are in motion.
In this video, we will complete the part of the game logic responsible for handling the fouls that should get checked for once all the balls have stopped moving.
I this video, we will expand our UI to make it more informative and we will update the looks of the existing UI elements to make them look prettier.
In this video, we will write code for the turn indicator that we have in the top part of the screen.
In this video, we will write code for the ball displays that we have in the top panel.
In this video, we will write the message pop-up that we have in the bottom part of the screen.
In this video, we will fix a few bugs related to game logic.
In this video, we will add the cueball mover to improve player experience.
In this video, we will modify our aiming system to enable the player to aim at any point on the table.
In this video, we will tweak the behavior of the ghost ball to make aiming even more user-friendly.
In this video, we will add the game menu that will pop up on the menu button press.
In this video, we will make our game restart when the Restart button is pressed.
In this video, we will add a new scene and enable navigation between the two scenes.
In this video, we will add an audio player to play background music and have it persist across the scenes.
In this video, we will start adding sound effects to our game.
In this video, we will adjust the volume of the sound effects based on the collision speed.
In this video, we will add sound effects for special cases, such as break shot, and spin shot.
In this video, we will add three more sounds: a UI button click sound, a foul and a game over sound. We will also add a game over dialog box.
In this lesson, we will make the mute buttons work and we will save the mute settings so that they stay when we restart the game.
In this video, we will start working on the AI part of our game, by outlining the AI logic.
In this lesson, we will get to code writing and we will start from getting a list of pocketable balls for the AI Player.
In this lesson, we will write code the filter the list of pocketable balls to get a list of both pocketable and reachable ones.
In this lesson, we will write code to have the AI Player pick the ball to pocket.
In this video, we will write more code to enable the AI Player to make a shot and we will also handle some edge cases.
In this lesson, we will write code the enable our AI Player to handle the ball in hand case.
In this video, we will integrate the AI Player into our game.
In this video, we will complete the AI Player by fixing some bugs.
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.