Create your own classic 2D top-down RPG game using Unity, an industry-standard game development program used by many large gaming studios and indie developers across the world.
Role Playing Games can be complex to create, with many interacting gameplay systems. We make it easy for you, with this online course that teaches you step-by-step how to make the foundations of any good RPG - from scratch.
In this course you’ll create the foundation of a 2D top-down RPG game, giving your players a fun combat moment in a well crafted level, based upon a solid game design, built using a robust code architecture.
Create your own classic 2D top-down RPG game using Unity, an industry-standard game development program used by many large gaming studios and indie developers across the world.
Role Playing Games can be complex to create, with many interacting gameplay systems. We make it easy for you, with this online course that teaches you step-by-step how to make the foundations of any good RPG - from scratch.
In this course you’ll create the foundation of a 2D top-down RPG game, giving your players a fun combat moment in a well crafted level, based upon a solid game design, built using a robust code architecture.
In this “beginner +” course you’ll learn to manage a bigger project from start to finish, learning beginner to more intermediate techniques and C# fundamentals.
So if you’re…
Ready to break out from beginner tutorials and build something you can call your own?
Familiar with the basics of Unity and looking to take the next steps?
Looking to build a solid foundation of C# fundamentals with Unity?
This is the course for you.
You’ll get full lifetime access for a single one-off fee. The creators are qualified and experienced with modelling and coding, so are able to explain complex concepts clearly, as well as entertain along the way.
And you’ll get access to the Q&A where our Instructors, Teaching Assistants and Community are ready to help answer your questions and cheer on your success.
Building an RPG is an amazing way to level-up your game development skills, so grab your magic staff and start improving your game development right now.
In this video (objectives)…
Stephen Welcomes you to the course and gives you some insight into what we’ll be creating!
In this video (objectives)…
Download Unity Hub and Visual Studio Code, including the extensions for C# and Unity Code Snippets.
In this video (objectives)…
If you're experiencing issues with VS Code or IntelliSense not working properly, this guide will walk you through several steps to hopefully get things working.
In this video (objectives)…
Let’s create a brand new project with the 2D(URP) settings using Unity 2022.1 and set up our editor layout.
In this video (objectives)…
Lucy invites you to join us in our various community support forums in order to ask questions, connect with other students and share your progress.
In this video (objectives)…
Any time we change our project during a lecture we will commit that change to a public source control repository for students to access. In this video, we show you how to access that content.
In this video (objectives)…
Get our hero moving and running around our game! We’ll import our sprites and get a basic scene up and running.
In this video (objectives)…
Let’s get our base hero game object moving around the game scene.
In this video (objectives)…
Let’s update our player sprite and set up some sprite preset settings within the project.
In this video (objectives)…
Our hero needs some basic animations! Use the animation and animator windows combined with our PlayerController class to bring him to life!
In this video (objectives)…
Let’s get our main hero up and moving right out of the gate. Explore cutting up sprite sheets with the correct pivot points and adjusting our y-axis renderer top-down 2D view with a simple tilemap.
In this video (objectives)…
In this section, we’ll be setting up an enemy state machine, handling basic pathfinding, health & stamina effects, and much more as we dive into some fun combat mechanics!
In this video (objectives)…
Introduce some basic enemy AI and enemy movement in this intro lecture to our overall combat system.
In this video (objectives)…
Animate the beginning of our sword combat mechanics.
In this video (objectives)…
Use some fun Mathf functions to get our sword animation flipping and swinging in both directions.
In this video (objectives)…
Add a sprite slash animation prefab to give our user some nice visual feedback and polish off our sword-swinging animation.
In this video (objectives)…
Get some colliders set up on our weapon prefab and start making contact with the enemy slimes.
In this video (objectives)…
Create an Enemy Health class to detect our sword collision and deal damage accordingly.
In this video (objectives)…
Using some 2D physics, let’s create a knockback class that we can use on different gameobjects that thrust them around our scene.
In this video (objectives)…
Flash the enemies white as needed when our enemies take damage from our courageous hero.
In this video (objectives)…
Complete our death visual feedback with a simple particle effect that we can use across a multitude of different enemies.
In this video (objectives)…
Who wants to spam mouse clicks?! Set up our hero to constantly swing his sword, as long as we’re holding down our assigned attack button.
In this video (objectives)…
Wrap up the basic combat mechanics with a nice dash mechanic in our Player Controller.
In this video (objectives)…
Clean up our combat code to tidy every thing up. Get rid of magic numbers, re-factor a couple minor adjustments, and keep our combat at a nice solid foundation we can continue to build on.
In this video (objectives)…
Set up a camera controller with cinemachine, rule tiles to easily expand on our scene, and introduce some cool environmental effects to add some life to our overall environment!
In this video (objectives)…
Use Cinemachine to set up some simple follow-the-player mechanics. We’ll also set up a polygon 2d collider confiner so that our camera doesn’t go out of bounds and see just how powerful Cinemachine can be!
In this video (objectives)…
Set up the base of our Tilemap and set up a solid foundation that we can use for our rule & animated tiles.
In this video (objectives)…
Use the rule tile feature set to set up several different rule tiles to streamline our scene setup process.
In this video (objectives)…
Take our water tiles one step further and animate them to help add some movement.
In this video (objectives)…
Set up a class we can use across a multitude of different gameobjects that will allow us to fade the transparency of both sprite and tilemap renderers.
In this video (objectives)…
Give our canopy a nice parallax effect by offsetting the position of our canopy in relation to the camera and player movement.
In this video (objectives)…
Set up some collision and animator effects on our bush prefab. This way, our player can truly experience what it’s like to hack and slash our way through our scenes.
In this video (objectives)…
In this section we’ll tackle what is takes to move our player character from scene to scene. We’ll set up exit and entrance portals to move the character as intended, as well as introduce generics using a nice singleton class.
In this video (objectives)…
Give ourselves two scenes to work with so that we can properly set up our scene transitions.
In this video (objectives)…
Introduce generics using a singleton class that other classes can inherit from to help certain gameobjects persist from scene to scene.
In this video (objectives)…
Let’s get our player to move to the proper portal entrance, after changing from one scene to the other.
In this video (objectives)…
Adjust our Cinemachine Camera to properly follow our player while transitioning between scenes.
In this video (objectives)…
Set up a smooth fade-in and out transition to give our portals a nice smooth effect.
In this video (objectives)…
Finish off our portal with a nice clean particle visual effect to give visual feedback to the player.
In this video (objectives)…
In this section, we’ll introduce what it takes to set up some nice 2D post-processing effects. Including different overrides to our global volume, and even using shader graph to give us a nice bloom & glow effect material we can use whenever we’d like.
In this video (objectives)…
Go over a simple explanation of Unity’s 2D URP system and how easy it can be to get set up with some cool post-processing effects.
In this video (objectives)…
Let’s explore a few different 2D lights and their different effects. Set up an animated torch sprite with the appropriate lighting to go with it.
In this video (objectives)…
Whether it’s our torch or any other kind of idle animation, sometimes it can be annoying if they’re all moving in perfect synchronization. Write a simple script to fix that!
In this video (objectives)…
Use the shader graph tool in combination with the post-processing bloom override to create a cool glow effect on certain materials.
In this video (objectives)…
Finish off this section with a nice twinkle particle system challenge to elevate our scene and incorporate what we’ve learned.
In this video (objectives)…
In this section, we’ll cover not only implementing the basics of inventory swapping. We’ll also set up unique attacking logic for the sword, bow, and staff using interfaces and scriptable objects.
In this video (objectives)…
Let’s get our UI overlay set up so we have a nice foundation to work with visually before we implement the mechanics of our basic inventory system.
In this video (objectives)…
With our UI set up, let’s rig up a basic inventory toggle system that will allow us to seamlessly visualize which weapon our player is using.
In this video (objectives)…
Refactor our current weapon sword attack system to implement an IWeapon Interface class that we can use for not only our sword, but other weapons like our bow and staff as well.
In this video (objectives)…
Create our first scriptable objects in a way so that our inventory knows which weapon to properly access.
In this video (objectives)…
In this two part topic, let’s get our three weapons instantiating correctly and attached to our player so we can use our scriptable objects and interface classes in tandem.
In this video (objectives)…
Fix up the existing errors and get our inventory swapping between the three weapons correctly.
In this video (objectives)…
Rig up our bow & staff prefabs to visually get them rotating around the player correctly.
In this video (objectives)…
Prepare our weapons to have their own unique individual cooldowns utilizing our scriptable objects and our IWeapon interface.
In this video (objectives)…
Create all the mechanics our bow & arrow needs to properly fire away at attacking slimes.
In this video (objectives)…
Wrap up everything we need with the arrow projectile, including things like damaging our enemies and instantiating a slick vfx particle system.
In this video (objectives)…
Get our magic staff correctly instantiating lasers into the scene.
In this video (objectives)…
Edit the laser sprite and 2D collider during run time to give the visual effect the laser is quickly growing and then fading out.
In this video (objectives)…
Clean up a couple of small bugs before we move on.
In this video (objectives)…
In this section, we’ll be implementing a complex shooter class to act as sort of a generic bullet hell type of system. In addition, we’ll introduce a unique grape ranged attack enemy and screen shake features to really flex our game dev muscles.
In this video (objectives)…
Use some of our previously created classes to properly rig up our player’s health.
In this video (objectives)…
Set up our secondary scene in a way that we have plenty of room to work with. We’re gonna need some space to act as a sort of playground for all our new and upcoming enemies!
In this video (objectives)…
Refactor a bit of code allowing us to set up our enemy bullet prefab to use our pre-existing projectile class.
In this video (objectives)…
Modify our Enemy AI state machine so that it implements an IWeapon interface and fires our bullet prefab toward our player.
In this video (objectives)…
Update our Shooter class to still first one bullet at a time but in rapid-fire burst succession.
In this video (objectives)…
Build upon our shooter class by implementing a cone of attack that can be modified in the inspector.
In this video (objectives)…
Wrap up our generic and re-usable shooter class in a way by adding by oscillation and staggering properties.
In this video (objectives)…
Our shooter class has a lot to it. Let’s introduce the OnValidate() editor-only method to create some restraints in the inspector as well as introduce editor tooltips.
In this video (objectives)…
Introduce a fun new enemy with some unique, fun, and tricky mechanics.
In this video (objectives)…
Lob up the grape projectile towards the player utilizing the animation curve property.
In this video (objectives)…
Finish off our Grape enemy by creating a nice splatter ground effect that both damages our player and fades away.
In this video (objectives)…
Wrap up our Bullet Hell section with a nice screen shake effect for some user visual feedback and immersion.
In this video (objectives)…
In this last official section of the course, we’ll polish things up by adding pickups, a custom cursor, death logic, UI for our dash stamina and health, and finally wrapping things up to properly launch our game on the web so your friends and family can see all your hard work.
In this video (objectives)…
Take the first steps toward setting up a pickup system. Create a magnetic sort of pull on our pickups when our player gets within range.
In this video (objectives)…
Use an animation curve to get our pickups spawning with a nice and custom pop-up animation when they are instantiated into our scene.
In this video (objectives)…
Utilize Enums so that we can properly assign what kind of pickup is to each individual pickup prefab.
In this video (objectives)…
Get our UI set up so that we can properly interact with our player’s health, stamina, and the current amount of gold coins.
In this video (objectives)…
Use the UI Slider component to seamlessly work with our player’s health.
In this video (objectives)…
Set up our gold TMP text components to update properly in our UI when our player picks up coins.
In this video (objectives)…
Let’s create some stamina functionality that only allows the player to dash if we have the available stamina, and reflect that in the UI.
In this video (objectives)…
Import our customer cursor image and rig that up to appear in our game.
In this video (objectives)…
Import some bonus building & NPC sprites in our project for more potential scenes and variety. Use our transparent detection class to properly set up our buildings.
In this video (objectives)…
Set up our player death animation as well as spawn our player back in our town scene when our player’s health gets to zero.
In this video (objectives)…
Clean up the last of our bugs and other code discrepancies.
In this video (objectives)…
How to upload our game to ShareMyGame.com using a WebGL build version of our game.
In this video (objectives)…
Well done on this course! You did a great job! Can’t wait to see what you come up with next.
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.