This is the most comprehensive Unreal Engine course available. If you want to learn how to architect a fully-functional RPG game, this course will give you the ability to do so with an expandable code base, architected with AAA quality code. If you've ever wondered where to draw the line between C++ and Blueprints, this is the course for you. If you've ever wanted to create an RPG complete with a stats system, abilities, leveling up, spells, attributes, menus, all while keeping your code base clean and following best practices, this is the course for you. If you want to step up your Unreal Engine development capabilities and better understand the inner workings of the engine, this course is for you. If you have plans to make your own serious game with interconnecting systems, involving attributes, abilities, level ups, enemies and AI, and coded for multiplayer, this is the course for you.
This is the most comprehensive Unreal Engine course available. If you want to learn how to architect a fully-functional RPG game, this course will give you the ability to do so with an expandable code base, architected with AAA quality code. If you've ever wondered where to draw the line between C++ and Blueprints, this is the course for you. If you've ever wanted to create an RPG complete with a stats system, abilities, leveling up, spells, attributes, menus, all while keeping your code base clean and following best practices, this is the course for you. If you want to step up your Unreal Engine development capabilities and better understand the inner workings of the engine, this course is for you. If you have plans to make your own serious game with interconnecting systems, involving attributes, abilities, level ups, enemies and AI, and coded for multiplayer, this is the course for you.
In this course, we will create a top-down RPG style game, filled with systems architected using Unreal Engine's built-in Gameplay Ability System (GAS). This is where you will learn how to architect a shipped game, and code it expertly so it can be easily expanded, upgraded, and maintained. We follow SOLID coding principles, and balance the Blueprint/C++ ratio in a way that AAA shipped games do, such as Fortnite. My experience with AAA shipped game code, as well as consultations with industry veteran developers has allowed me to reveal to you the way a real shipped game's code base looks like. If you've ever wondered how much of a game can be kept in Blueprint versus C++, look no further. This course is the answer.
NOTE: This course involves programming in C++, which involves the use of an Integrated Development Environment (IDE) such as Visual Studio, Rider, or VSCode. The IDE used in this course by me will be Rider, but this IDE is not a requirement for students to follow the course. You can use any IDE of your choice.
The assets in this game project were made specifically for this course, and will be provided in an asset pack. This includes:
Characters, including Aura, the main character, as well as enemy characters including Goblin Warriors, Goblin Rangers, a Goblin Shaman, Red and Black Demons, the Ghoul, and a Shroom.
A modular dungeon pack that can be pieced together to make basic dungeons
A waypoint shrine and obelisks
Particle Niagara System Effects, including explosions, level up effects, slingshot rocks, hit impacts, electricity beams, fireballs, fire bolts, flames, stars for stun effects, and more.
Sound effects for enemies, footsteps, spells, and more.
Textures for the HUD, including high-quality buttons, frames, dynamically-animated spell globes, progress bars, XP bar, and more.
Full animation sets for Aura and all enemies
Much more.
In this course, we will be covering the following topics:
Setting up a Top-Down Project from scratch
Enemy and item selection with outline effects
Proper use of OOP and inheritance to create a character class hierarchy
Intro to the Gameplay Ability System and the core classes that comprise it
Custom Gameplay Ability System Components and Attribute Sets, and how to replicate Attributes
All important settings for all GAS classes and components
How to use Attributes for player stats, including Primary Attributes:
Strength (increases physical damage)
Intelligence (increases magical damage)
Resilience (increases Armor and Armor Penetration)
Vigor (increases Max Health)
Secondary Attributes, based off of primary attributes and other custom variables:
Armor (reduces damage taken, improves Block Chance)
Armor Penetration (ignores percentage of enemy Armor, increases Critical Hit Chance)
Block Chance (change to cut incoming damage in half)
Critical Hit Chance (chance to double damage plus critical hit bonus)
Critical Hit Damage (bonus damage added when a critical hit is scored)
Critical Hit Resistance (reduces critical hit chance of attacking enemies)
Health Regeneration (amount of Health restored every 1 second)
Mana Regeneration (amount of Mana restored every 1 second)
Max Health (maximum amount of Health obtainable)
Max Mana (maximum amount of Mana obtainable)
Vital Attributes - things like Health and Mana, which are dependent on all the other attributes
Gameplay Effects - classes in the GAS system used to apply changes to attributes
Gameplay Tags - an essential part of GAS, which allows us to identify qualities, attributes, abilities, character classes, and any other thing we can imagine
Game UI - how to handle complex UI in an RPG game efficiently, in an organized, modular, and scalable manner. We cover different UI paradigms, from MVC (Model View Controller) and MVVM (Model View ViewModel, using Unreal Engine's new ViewModel feature)
Full Attribute and Spell Menus, with upgrade abilities, spell trees, locked spell levels, spell upgrades by ability level, and more
Attributes - how to use Gameplay Attributes to represent player stats, and incorporate them into the gameplay mechanics by creating an Effect Application pipeline, allowing for calculations and results caused by phenomena in the game, such as combat damage
Gameplay Abilities - the heart of GAS. We create all manner of types of gameplay abilities to handle the casting of spells, handling important capabilities of the player character and enemy AI, and how to configure different abilities to suit your needs.
Different RPG Classes - we implement different character RPG classes including the Ranger, Warrior, and Elementalist, and do so in an easily-scalable manner so you can have any number of character class types in your game
Damage and Combat - we implement a full RPG style combat system with different damage types, damage resistances, and debuffs corresponding to damage types, and encode these calculations into our damage pipeline. All attributes, damage types, resistances and debuffs are functional in this game.
All combat mechanics are displayed in some form of visual feedback to the player. This includes floating text for damage, changing color based on custom criteria, floating text to inform of critical hits, blocked hits, and critical blocked hits. We also implement knockback and stun mechanics in response to lightning damage, incapacitating the character/enemy, as well as fire debuffs, where characters are set ablaze and take fire damage while burning.
Enemy AI - We implement the enemy behavior using Unreal Engine Behavior Trees and the Environment Query system (EQS) to provide customized behavior for the Ranged, Warrior, and Elementalist enemy types.
Enemies can cast spells and summon AI minions
Fading geometry when it gets in the way of the camera for a top-down game
Ability Cost and Cooldown (spells spend Attribute resources - in this game, spells cost Mana)
Fully functional HUD with Equipped Spells, displaying spell cooldown timers, and experience (XP)
The ability to assign Abilities to different inputs in the spell menu (assign FireBolt to the 1 key and Electrocute to the Left Mouse Button, swap them back, etc.)
Experience and Level-Up System - We craft an experience system, awarding XP for eliminating enemies, and leveling up when reaching XP thresholds for various abilities. XP and Level are displayed in the HUD, and Level Up messages and effects are as well. Leveling up is associated with gaining Attribute Points and Spell Points, which can be used to upgrade Attributes and Spell abilities in the Attribute and Spell Menus respectively, as well as topping off Health and Mana upon Leveling Up. (Basically, you will see enough examples of how to use this system that you'll be able to expand it with any functionality you want for your own games)
Passive Spells - Spells that you can equip which remain active while they are equipped.
A variety of Offensive Spells, showcasing different examples and features of GAS, including FireBolt, Electrocute, Arcane Shards, and FireBlast.
Saving Progress and Level Transitions
Intermediate/Advanced Unreal Engine topics, including custom Async Tasks, Ability Tasks, Blueprint Function Libraries, Asset Managers, Singletons (and why these are only good for a VERY select few cases), custom Gameplay Effect Contexts, Net Serialization, Struct Ops Type Traits, C++ Lambdas, game mechanics algorithms, and oh, so much more.
How to choose which functionality should go into C++ versus Blueprint - This is one of the most valuable lessons, and is taught all throughout the course. Students often ask me "which functionality should go in C++ versus in Blueprint?" This course is my answer. This is a serious-scale project foundation with over 100 hours of video, and no filler. The project is architected with approximately 50% Blueprints and 50% C++. I show you which functionality should be on the C++ side, which functionality is more appropriate for Blueprints, and why.
SOLID Coding Principles and code architecture - We keep our code base clean in this project. Another question I often get is "Is this best coding practice?" This course is my answer to this question. This is an example of code you would see in a AAA game, shipped to millions of players. Maintaining clean and modular code is essential to a serious game project that needs to be scalable, expandable, modular, maintainable, testable, performant, and efficient. This course will show you how.
This is not a beginner course. I expect you to already understand the C++ programming language and have at least created one Unreal Engine C++ project.
This course is my best course yet, and I'm very proud to bring you the Unreal Engine 5 - Gameplay Ability System - Top Down RPG course, the result of nearly a year of painstaking development, research, consultation with professionals, and asset creation. After taking this course, you will understand Unreal Engine far better than the average developer, and you'll be empowered to create your own well-architected projects, large and small, and you'll bring value to your team, your company, your solo venture, and anyone/anything else you grace with your skillset.
Join the course, and invest in the biggest leap of your game development career.
Stephen Ulibarri, founder of the Druid Mechanics Game Developer Community This course project is created in Unreal Engine version 5.2. Updates are periodically added to ensure compatibility with newer engine versions.
Welcome to the Unreal Engine 5 - Gameplay Ability System - Top Down RPG course!
We open the Startup Project and configure some settings
We set up our project for version control using Git
We create a base Character class for our game Characters to inherit from
We derive two subclasses from our base Character class: AuraCharacter and AuraEnemy
We create our Character Blueprints and set the mesh assets. We also add a Weapon to the Base Character
We create an Animation Blueprint for Aura and an Animation Blueprint Template for all our Enemies
We create our Input Action for Movement and Input Mapping Context to map input keys
We setup Input in the Player Controller Class
We create a Move callback for our Move Input Action and Bind it in the Player Controller class
We create a Game Mode and assign the Default Pawn and Player Controller Classes
We create an Enemy Interface function that we can use to highlight enemies when hovering over them
We implement the highlight decision process in the Player Controller
We use a Post Process Highlight material to show a red outline of highlighted enemies
Quiz on Section 2
We learn what the Gameplay Ability System is and what it can do for us
We learn about the main parts of GAS in this high-level overview of the Gameplay Ability System
We create the Player State class for Aura
We create the Ability System Component and Attribute Set classes
We learn about how classes work in Multiplayer and what Replication is
We construct the Ability System Component and Attribute Set for the Enemy and for the Player Controlled Character
We learn about the Replication Mode for Ability System Components
We learn how to set the Owner Actor and the Avatar Actor for our Ability System Component
Quiz on Section 3
We learn what Attributes are, how they are stored, and how the preferred way to change them is through Gameplay Effects
We add our first Attributes to our Attribute set: Health and Mana
We learn about the Attribute Accessor macros provided by the Ability System
We create an effect actor designed to change attributes
Quiz on Section 4
We lay out the plan for our game's UI architecture
We create our base Widget and Widget Controller classes
We create the Globe progress bar, making use of widget inheritance
We derive a Health Globe and Mana Globe widget based on our Globe Progress Bar
We create the HUD class for our project
We make an Overlay Widget Controller for the Overlay widget in our Viewport
We learn how to broadcast initial values from the Widget Controller to the Widgets
We learn how to listen for attribute changes in the Ability System
We create callbacks for mana attribute changes
Quiz on Section 5
We learn what Gameplay Effects are and how they can be used to modify Attributes
We improve our Effect Actor so it is more versatile and can apply gameplay effects
We create an Instant Gameplay Effect and apply it on overlap with our Potions
We learn about Duration Gameplay Effects
We learn the difference between Duration and Infinite Gameplay Effects and those with Periodic behavior
We learn how effects can stack and cover the parameters for stacking
We add an Infinite Gameplay Effect to our Effect Actor
We add an application and removal policy for the effects in our Effect Actor
We learn how we can remove infinite gameplay effects and create a Fire Area.
We learn about PreAttributeChange and how we can use it to clamp Attribute changes
We learn about PostGameplayEffectExecute and the plethora of values we can harvest in it about a Gameplay Effect
We learn how to create Curve Tables so we can scale the value in our Gameplay Effect using a Scalable Float Magnitude Calculation
Quiz on Section 6
We learn what Gameplay Tags are and why they are so useful
We learn how to create Gameplay Tags from within the editor
We learn how to create Data Tables that are converted into Gameplay Tags
We learn how to add Gameplay Tags for Gameplay Effects
We learn how to respond to Gameplay Effect application via the Ability System Component's built-in delegates
We learn how to get all Asset Tags on a Gameplay Effect in C++
We learn how to broadcast a Gameplay Tag Container filled with Asset Tags to the Widget Controller
We learn how to create a Data Table to hold widget information for messages
We create a function for finding Data Table rows corresponding to message Gameplay Tags
We learn how to broadcast data from Data Table rows to Widget Blueprints
We create the message widget for when we add a message tag to a gameplay effect
We animate the message widget
We learn how to replace callback functions to lambdas which we bind to delegates instead
We are challenged to create a Ghost Globe that trails behind the Health and Mana Globes
We learn how to properly clamp attribute changes via PostGameplayEffectExecute
Quiz on Section 7
We learn how to initialize Attributes by setting values in a Data Table
We learn how to initialize Attributes with the use of a Gameplay Effect
We learn how to modify an Attribute in a Gameplay Effect with a modifier based on other Attribute values
We learn how the math works behind modifiers and go over several examples
We learn how modifiers can have coefficients to create more complex modifier math
We create the Secondary Attributes for our RPG project
We learn how to derive Attributes from other Attributes, so when the backing Attribute changes, so does the derived Attribute
We learn how Modifier Magnitude Calculations (MMC) can have arbitrarily complex modifiers.
We add Level to our Player State and create the Combat Interface so we can get the Level of an entity in the game
We learn how to create Modifier Magnitude Calculations (MMC) to have arbitrarily complex modifiers.
We initialize the Vital Attributes with a Gameplay Effect
Quiz on Section 8
We lay out the Game Plan for our Attribute Menu
We create the Framed Value widget that we can reuse in other widgets
We create a Text Value Row widget that has text as well as a Framed Value
We create the Text Value Button Row widget that makes use of the Named Slot so we can take advantage of widget inheritance
We begin construction of the Attribute Menu widget itself
We make a Button widget that we can reuse in any number of situations
We subclass the Button widget into a Wide Button that looks pretty darn spiffy
We implement functionality for opening the Attribute Menu
We implement functionality for closing the Attribute Menu
We create a plan for displaying the Attribute Data in a well-coded manner
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.