Ever dreamed of creating your own epic 3D role-playing game? Now’s your chance.
Join us as we guide you through building a large-scale RPG in the Godot engine. You’ll learn to bring your ideas to life, levelling up your dev skills in the process.
We’ll start with the essentials and tackle the fun stuff: crafting attacks, abilities, and a levelling system to make your player character truly shine. By the end, you’ll have a fully playable RPG, complete with gear, enemies, and jaw-dropping environments.
Ever dreamed of creating your own epic 3D role-playing game? Now’s your chance.
Join us as we guide you through building a large-scale RPG in the Godot engine. You’ll learn to bring your ideas to life, levelling up your dev skills in the process.
We’ll start with the essentials and tackle the fun stuff: crafting attacks, abilities, and a levelling system to make your player character truly shine. By the end, you’ll have a fully playable RPG, complete with gear, enemies, and jaw-dropping environments.
Building a game this size sounds intimidating, right? No worries. We’ll guide you step-by-step to create a fully-fledged RPG in Godot, from scratch. You’ll also learn the secret sauce behind pro-level Godot skills.
Ever wondered how to make your character stronger across levels? We’ll teach you how to use resources to manage player stats and create that satisfying "level-up" feeling players crave. Power up your skills and your hero at the same time.
RPGs are all about killer gear. You’ll master inventory systems, item equipping, and weapon damage. Plus, you’ll make sure players can see their hero evolve with each shiny new sword or piece of armour they equip.
Animations bringing the game to life? Check. We’ll dive into animation trees and state machines, so your characters don’t just move—they flow. Hook animations into gameplay to make every attack and action feel impactful.
From bone attachments to global illumination, we’ve got your back with advanced techniques that will make your RPG not just playable but downright gorgeous. Make those levels pop with lighting that wows even the pickiest players.
Stuck on complex interfaces? We’ll teach you how to create dynamic UIs that update with player actions—whether it’s equipping items or tracking stats. Build interfaces players love to use.
This course is perfect for intermediate Godot devs or anyone who’s taken our Complete Godot 3D course. If you know the editor and can set up scenes, this is your chance to level up.
Stuck? Never fear. You’ll have access to a supportive community and a crack team of teaching assistants. Whether you’re debugging or dreaming up your next feature, you won’t be on this journey alone.
The Godot engine is blowing up (not literally. ), and now’s your chance to jump on in. Grab your keyboard, your imagination, and maybe a cup of tea—it’s time to get creating. See you in the course.
In this video (objectives)…
Welcome to the course! Bram gives you an overview of what you’ll be learning throughout this course.
In this video (objectives)…
Creating the project and getting a first level into a runnable state.
In this video (objectives)…
Creating the player scene with collision, mesh, and a camera. Then instantiating it in the level ready for play.
In this video (objectives)…
Adding a template script for simple movement to the player and adding some custom input evenets to change the controls.
In this video (objectives)…
Introducing a new node to keep the camera separated from the player while still colliding with the environment.
In this video (objectives)…
Using the InputEventMouseMotion event to store relative mouse motion and sanitize it for controlling the camera.
In this video (objectives)…
Adding intermediary nodes to avoid axis ordering problems with 3D rotations.
In this video (objectives)…
Using the iterpolate_with() and exp() functions to smooth our camera motion.
In this video (objectives)…
Using the Basis class to reorient our movement vector into the player’s perspective.
In this video (objectives)…
Learning about GLTF files and using them to flesh out our level with foliage.
In this video (objectives)…
Creating a scene for our animated player character and orienting it to face in the direction of movement.
In this video (objectives)…
Using the interpolate_with() function to animate our rigs rotation over time.
In this video (objectives)…
Setting up animations in the advanced importer and introducing animation trees for blending animations.
In this video (objectives)…
Using AnimationTree parameters to control our blend space in code.
In this video (objectives)…
Using the move_toward() function to animate our blend weight and adding new animations into the state machine.
In this video (objectives)…
Using the playback object to control our AnimationTree in script.
In this video (objectives)…
Using the BoneAttachment3D Node to put objects into the players hands that update with animations.
In this video (objectives)…
Adding to the player script letting us lock motion in a given attack direction when the player swings their sword.
In this video (objectives)…
Adding functions into our player script to better organize the physics process function.
In this video (objectives)…
Using a BoneAttachment3D to put a ray in the players hands for detecting the recipients of weapon swings.
In this video (objectives)…
Creating an enemy scene with randomly selected meshes.
In this video (objectives)…
Introducing the health component - a node for handling player and enemy health in a reusable fashion.
In this video (objectives)…
Making our AttackCast interact with HealthComponents to deal damage to the enemy. As well as setting up a defeat animation for the Rig.
In this video (objectives)…
Disabling enemy collision on defeat and using the ShapeCast3D node to detect the Player.
In this video (objectives)…
Adding animations for a heavy attack in the rig scene letting the enemy swing at the player when they get in range.
In this video (objectives)…
Adding a HealthComponent to the player and preparing an AreaAttack ShapeCast3D.
In this video (objectives)…
Setting up the AreaAttack in the Enemy scene so the Player can be defeated.
In this video (objectives)…
Reusing nodes we built for the Enemy to make the player able to Heavy Attack.
In this video (objectives)…
Finishing off the player’s suite of moves by setting up a dash ability to avoid enemy attacks.
In this video (objectives)…
Adding the dash animation and starting to control motion from the Dash ability scene.
In this video (objectives)…
Using exponential decay to ease the player’s velocity and blend between dashing and idle.
In this video (objectives)…
Setting up a GPUParticles3D node to add a dust cloud around the player’s feet when dashing.
In this video (objectives)…
Improving our dash to track the player’s state, so we can’t dash when defeated. As well as looking at useful functions to track variable permutations in the is_overhead() function.
In this video (objectives)…
Introducing and setting up a custom resource for player levelling and stats.
In this video (objectives)…
Introducing inner classes for creating reusable objects for stat attributes like strength and speed.
In this video (objectives)…
Adding extra functions to the ability inner class for calculating modifiers. Additionally setting up the remaining ability objects.
In this video (objectives)…
Adding functions for levelling up and improving ability scores. As well as making defeating enemies cause a level up.
In this video (objectives)…
Rewarding the player with experience points when they defeat enemies and then triggering level ups.
In this video (objectives)…
Using our ability modifiers in the player script to control the player’s damage and movement speed.
In this video (objectives)…
Using our agility ability to trigger critical hits on regular and heavy attacks.
In this video (objectives)…
Creating a Label3D scene for showing numbers. Giving more feedback for attacks and critical hits.
In this video (objectives)…
Building an Autoload for spawning damage numbers whenever health components take damage.
In this video (objectives)…
Connecting character stats and the HealthComponent with a lambda function so our hp increases as we level up.
In this video (objectives)…
Adding an extra modifier for the agility ability to manage responsible for cooldown between dashes.
In this video (objectives)…
Downloading assets for the user interface and setting up window dimensions in project settings.
In this video (objectives)…
Getting a hold of a font file for the project and setting up the info bar to display the player’s level.
In this video (objectives)…
Introducing the ProgressBar and TextureProgressBar to display our players health and experience in the info bar.
In this video (objectives)…
Finishing off the InfoBar and adding a health label to track max health and damage accurately in game.
In this video (objectives)…
Creating a menu for holding items and displaying character stats, that the player can open and close.
In this video (objectives)…
Making the inventory screen actually pause the game as well as make the mouse usable. Then moving onto setting up the spacing and panels for the menu itself.
In this video (objectives)…
Adding attribute displays to the character sheet and setting up a script to show the player’s strength, speed, endurance, and agility.
In this video (objectives)…
Updating the character sheet whenever the player levels up, previewing attack damage and adding a TextureButton to back out of the inventory menu.
In this video (objectives)…
Adding a SubViewport to the Inventory so we can preview our character model for equipment later on. Additionally introducing the World3D resource.
In this video (objectives)…
Introducing Navigation, regions, and AABBs to set up the navigatable area of the main level.
In this video (objectives)…
Adding NavigationAgent3D Nodes to the enemies so they can start using the NavigationServer to navigate towards the player.
In this video (objectives)…
Focussing on Vector subtraction to calculate local paths and introducing avoidance options in navigation agents.
In this video (objectives)…
Making enemies change to the running animations during pursuit, and fixing an issue with avoidance causing attacking enemies to move.
In this video (objectives)…
Fixing enemy navigation when they are defeated and adding support for swapping in and out different weapons and shields.
In this video (objectives)…
Using more of our glb files to build the entrance to a castle in our starting level, as well as updating navigation meshes.
In this video (objectives)…
Introducing Godot’s global illumination options and updating the world evironment.
In this video (objectives)…
Adding mountains to the background and a variety of floor decorations to add some variety to the grass.
In this video (objectives)…
Setting up the physics and decorating our level with the final four .glb files.
In this video (objectives)…
Covering some of the essential project settings for improving graphical quality with anti-aliasing and shadow quality.
In this video (objectives)…
Introducing the scene we will build all of our inventory items from.
In this video (objectives)…
Using inheritance and extending scripts to create variations of the item icon with different functionalities.
In this video (objectives)…
Setting up the last two Item Icons and introducing enums for defining different armor types.
In this video (objectives)…
Building a chest to hold our item icons the player will be able to loot. Additionally, introducing the filter() function to control the type of items in an Array.
In this video (objectives)…
Adding an extra ShapeCast3D to the player so we can interact with chests in our game world.
In this video (objectives)…
Adding a panel to our user interface for displaying when the player can interact with a game object. Additionally using an AnimationPlayer to contextually fade it out.
In this video (objectives)…
Creating a panel that shows and hides when the player interacts with a chest to show its contents.
In this video (objectives)…
Using reparenting to move item icons from the chest into the loot container view for looting.
In this video (objectives)…
Renaming our LootContainer and fixing an exploit when opening multiple chests.
In this video (objectives)…
Dynamically connecting to the ItemIcon’s interact signals so we can interact with the button in different menus.
In this video (objectives)…
Adding a panel for tracking how much gold our player has collected from chests.
In this video (objectives)…
Creating a section of our character panel to display equipped gear and connecting signals to move items around the inventory.
In this video (objectives)…
Updating the inventory to use the weapon in the weapon slot to calculate the player’s damage.
In this video (objectives)…
Making it possible to equip armor and shield icons as well as adding the last few items to our main level and previewing armor effectiveness.
In this video (objectives)…
Using our armor value to reduce incoming damage from enemy attacks.
In this video (objectives)…
Using group tags to update our multiple rigs to show whatever weapon and shield is equipped.
In this video (objectives)…
Fnishing off the inventory by making ArmorIcons change the player rig’s mesh.
In this video (objectives)…
Adding an interactible passageway for loading new levels.
In this video (objectives)…
Uing the ColorRect node to fade the screen to black, hiding the transition when loading new levels.
In this video (objectives)…
Creating a second game level for the castle interior, and building the wall and turret perimeter.
In this video (objectives)…
Decorating the castle level with all our remaining 3D assets.
In this video (objectives)…
Creating a new global autoload to store persistant data and Nodes we want to keep between different levels.
In this video (objectives)…
Adding to the PersistentData autoload so it can store the players armor, weapon and shield between levels.
In this video (objectives)…
Making collected gold and the player’s current health persistent between levels.
In this video (objectives)…
Setting up our enemies and chests so the game is in a playable state.
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.