
Chris Kurhan gives you a warm welcome and an overview of what will be covered in this course.
We’ll install Unity Hub, Unity, install core packages, and set up our base scene.
We introduce the ways that you can get help, support and contribute to the community.
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.
Set up Cinemachine to control our Camera movement.
Using the New Input System we’ll handle keyboard input to move the camera around our scene.
We’ll implement a WarCraft III-style Zoom with Cinemachine and the new input system!
We’ll implement a WarCraft III-style Rotation with Cinemachine and the new input system!
With Keyboard inputs working, let’s add in the ability to move the camera by nudging the edge of the screen!
Now that we have a bunch of ways to move the Camera, let’s limit ourselves to our playable area.
Section Intro - Navigation Meshes, NavMeshAgents, and Player Input
Understanding the “new” NavMesh system. Creating our first NavMeshSurface and making adjustments so units can only move where we want them to.
We’ll cover how to make an AI Unit follow some other unit and review the important configurations of the NavMeshAgent.
In this lecture we’ll enable selecting and deselecting of a unit via an ISelectable interface and the URP Decal Projector.
You’ll learn how to prevent the URP Decal Projector from rendering on certain objects, and we’ll set up some new Physics layers for our Units and Buildings.
By the end of this lecture we’ll be able to issue movement orders to our units and have them move to any point on the NavMesh!
In this lecture you’ll learn how to implement a click-and-drag resizing UI element that we’ll use later to select units!
Learn how a powerful design pattern: The Event Bus can help us decouple some of our components and make our lives easier!
We’ll extend the Event Bus capabilities to support unit deselection.
Extend the drag-selection UI to also select multiple units so we can issue orders to multiple units at a time!
Now we’ll be able to add a unit or group of units to our selection by holding the Shift Key.
We’ll take a clsoer look at NavMesh Areas, Obstacles, and Modifiers to control pathing of our NavMeshAgents!
In this lecture you’ll learn a way to prevent units from “dancing” with one another as they fight to reach the same destination!
Set up a flying unit that operates on its very own NavMesh so it doesn’t collide with the ground units!
Section Intro - Buildings & Units
We’ll venture into setting up some buildings, starting with a simple one - the Supply Hut!
Now that we’re seeing some similarities between Units and Buildings, let’s unify how we interact with them to make our lives easier.
Begin to unlock the power of ScriptableObjects as configuration!
We’ll set up one of the most important buildings in the game - the Command Post!
Learn about the Command Pattern by setting up the framework for all the actions our buildings and units will be able to do!
Command-ify the “Fancy Movement” by introducing the Command Context to the MoveAction.
Bring those commands up to the UI so the player can see which commands are available to issue to the selected units!
Now we can issue commands to our units by clicking on the UI!
Buildings will now be able to build units using a new command: the Build Unit Command!
Building units is one thing, but what about queueing multiple units to be built? That’s this lecture!
We’ll dive into the UI structure and introduce a scalable framework to manage our UI.
One of the key workhorses of any game is a Progress Bar! In this lecture you’ll learn how to make one.
In this lecture we’ll hook up our BaseBuilding to the UI and the Progress Bar to show the progress of the current unit being built!
Add the ability for the player to cancel items in the build queue!
We’ll be setting up all of the units and buildings we’ll be using throughout the rest of the course.
Section Intro - Behavior Trees
Start using Unity’s first party Behavior Tree solution - Unity Behavior to handle our unit movement.
Learn how to create custom nodes in Unity Behavior by creating a custom movement node.
Set up a scalable framework for defining supplies that can be gathered by workers.
Add a “Command” to the Behavior Tree that we can branch on to add new behaviors!
Extend the Worker Behavior Tree to begin gathering minerals!
Extend the Gathering branch of the Behavior Tree to return supplies back to a Command Post.
Gathering workers will ignore other units and travel back and forth between the GatherableSupplies and Command Post very smoothly.
Workers will now pick a more logical place to gather minerals and a more logical place to return them to on the Command Post.
Upgrade our Workers to choose nearby GatherableSupplies to gather from if their current target is busy!
We'll clean up some interactions with our gathering and also prevent GatherableSupplies from getting locked!
Learn how to synchronize what the BehaviorAgent is doing with the Animator!
Connect what happens in the Behavior Tree to our code with Behavior Events.
https://gitlab.com/GameDevTV/unity-real-time-strategy/urts-course/-/commit/43fa910214decfaf24a1abeababee50ebf8b2253
We'll start using the Conditional Branch node to make our workers gather more intelligently!
Expand our use of the Behavior Tree to allow Workers to return supplies and go back to gathering with a single click!
Section Intro - Building Buildings
Implement the ability to override which Commands are available on a Unit so we can have building sub-menus.
Start supporting diverging needs of our Unit and Building ScriptableObjects
Create a new Build Buildings Command that allows us to place a building anywhere in the scene at runtime!
Create a new node for the Behavior Tree: Build Building Action.
Start using some flow control nodes that enable parallel execution in the graph so we can design behaviors in parallel!
Continue to explore animating the Worker in the Behavior Tree with the flow control nodes.
Manage multiple branches running in parallel to prevent unwanted spillover from the other branch.
Polish off the building effect by cleaning up some teleporting and look and feel issues.
Allow our Workers to cancel building a building before it is complete.
Handle when units are destroyed and resolve some errors we're experiencing right now when that happens.
Enhance our building’s knowledge of their progress with a new Building Progress struct so later we can resume building.
We'll finish out the ability for our workers to resume building a building that's been paused due to another worker's untimely demise.
Add the ability to prevent placing buildings in undesirable locations
Provide visual feedback to the player about whether or not the building can be placed at at their current mouse position.
Create a new type of Building Restriction that will prevent the player from placing things a little too close together.
Require the player has enough supplies to pay for buildings and units, and subtract the supplies when building them!
Refund the player supplies when they cancel building a unit in the queue, or cancel building a building!
Conditionally lock the commands on the UI so the player doesn't think they can execute a command that cannot be executed.
Show a tooltip on the UI Action Buttons based on the active command for that UI Action Button
Show the cost of a tooltip, improve the positioning, and ensure they don’t show up when there’s no relevant command assigned!
We'll begin dynamically showing more data to the player in our bottom bar such as the single unit selected's name, icon, and health!
Start handling the various options of UIs when a building is selected.
Introduce the Building Spawn Event so our UI can update when a building completes building.
When a building is being built, it will gain health over the build duration and we'll even show it on the UI!
Add the ability to restrict some commands to only issue to one unit at a time, like building a building!
Introduce building events into the Behavior Tree to catch some edge cases with multiple workers building.
Sub Graphs are powerful tools that allow us to encapsulate behaviors away from our main graphs. We'll implement those in this lecture to declutter our Worker BT.
We'll go through a polishing pass on building the buildings to ensure a good experience for our players.
Configure the rest of the building we'll be able to build in this course!
Section Closing - Building Buildings
Section Intro - Military Units
Create a new behavior tree and base class for our Military Units.
Set up the framework for arbitrary objects taking damage, and ensure our Buildings and Units can both take damage and die!
We'll empower our AI with a standardized way of understanding the world around it - Sensors.
We'll connect the GraphAgent and the DamageableSensor to one another so our unit AI becomes aware of the nearby IDamageables!
Set up a method to configure our attacks on a unit-by-unit basis.
Create a new Attack Command to send our units off to war!
In this lecture our units will start dealing damage to other IDamageables!
Add some polish to the Attack Target Action we implemented in the previous lecture to make our attacking look and feel much better!
Upgrade the attacking behavior of our units to have the attack command be a default-aggressive movement AttackCommand as well!
Configure our second military unit, the Grenadier!
Animate a projectile attack from the Grenadier, including an explosion!
Delay applying damage until the grenade makes impact with its target!
We'll enhance our Grenadiers (and other units) to be able to apply Area of Effect Damage!
Circle back around to creating the Air Transport, which will have some interesting behaviors soon!
Prepare for units loading into other units with the new Transport Config SO!
Set up the Behavior Tree component of loading units into an Air Transport.
Give the player the ability to click Load Unit and select which unit should be loaded into the Air Transport!
Add the ability to hide commands from showing on the UI, allow units to be "loaded into" an ITransporter, and a related small movement refactor.
Update the AirTransport's Behavior Tree to support loading multiple units instead of only 1 at a time!
Add the ability to our Air Transport to unload all the units currently loaded inside!
Add a new Unit Transport UI to show which units are currently loaded inside the selected Air Transport.
Update the UI when units are loaded & unloaded with 2 new events.
We'll clean up some of the small issues that slipped through the cracks as we implemented a lot of new functionality in this section!
Section Closing - Military Units
Section Intro - Unit Ownership
Add in the concept of Ownership to units, so our units stop attacking each other, but still attack enemy units.
Introduce the concept of Ownership to the Event Bus to allow more targeted channels for events, per Owner.
Continue to support the Ownership concept on the Event Bus, this time adding support to the PlayerInput and the UI!
Ensure that as the player, we only receive updates on Supplies when the SupplyEvent is our own.
Section Intro - The Tech Tree
We’ll set up the fundamentals of a Tech Tree in a ScriptableObject.
Start unlocking Dependencies in the Tech Tree on Building spawn!
Block the Player from building Units or Buildings that have not been unlocked in the Tech Tree!
Create the base Upgrade ScriptableObject that will allow us to modify arbitrary properties on AbstractUnits!
Create a new Research Upgrade Command and implement researching upgrades end to end!
Weapon and Armor Upgrades typically have multiple levels. In this lecture you’ll learn how to support these in our system.
Make the UI more responsive to events, like the BuildingSpawnEvent and UpgradeResearchedEvent.
Using the Upgrade Scriptable Object, we’ll apply any change to any value on any object that we specify in the Inspector!
Generify the way we access properties we want to upgrade to make it much faster and easier to create new types of modifiers!
Implement “Runtime Sets” to isolate upgrades to our own units, and prevent accidental changes to the base SO configurations.
Set up the TechTreeSO to support when key UnlockableSOs are lost.
Update our Tooltips to show the required tech upgrades to build a unit or building!
Lock upgrades at ALL Buildings if that upgrade is already being researched!
Section Intro- Simple Fog of War
We’ll encode the world into a Render Texture using a Camera so later we can render the fog of war.
Start rendering the Fog of War on the Main Camera so we can’t see where our units can’t see!
Using a new Render Texture and Render Feature, we'll "remember" where what our untis have seen in the Scene.
Combine the Explored and Currently Visible Fog of War Textures into a single display to get that true RTS Fog of War look and feel!
Blur the Render Texture output in a Shader to hide some of the pixelation at the edge of our fog.
We’ll add the ability to control how far units can see with a Unit Sight Config.
In this lecture we’ll prevent units not owned by the Player from carving the Fog of War.
Using the Fog of War Render Texture data we’ll determine each not owned unit’s visibility status.
When a unit is no longer within the active visibility, we’ll hide them!
When buildings are no longer within the active visibility, we’ll hide them!
When GatherableSupplies are no longer within the active visibility, we’ll hide them!
When structures are hidden, we’ll generate a placeholder model so the Player can see a snapshot of the last time they viewed that area.
Ensure we remove the building placeholders when the building dies and is visible, or only when it’s revealed again.
Block clicks on objects that are not in the active visibility so they can’t accidentally issue attack or gather commands on objects in hidden areas!
Make units “forget” about units that have become invisible, so they can’t interact with units they can’t see!
Clean up some sneaky bugs related to unit deaths and fog visibility.
Prevent the Player from building in the Fog of War by enhancing the Building Restrictions.
Section Closing - Simple Fog of War
In this video (objectives)…
Section Intro - Minimap
In this video (objectives)…
We’ll do some Unity configuration to get a realistic, dynamic display for our minimap and show it on the UI!
In this video (objectives)…
Show units and buildings on the Minimap.
In this video (objectives)…
Show where the Camera is and what it can see on the Minimap.
In this video (objectives)…
Show where the Camera is and what it can see on the Minimap.
In this video (objectives)…
Allow the Player to click on the Minimap to move the camera!
In this video (objectives)…
Allow the Player to right click on the Minimap to issue commands!
In this video (objectives)…
Allow the Player to issue any command by left clicking on the Minimap.
Ever dreamed of making your own real time strategy game but got totally pwned by the complexity? You’re not alone. RTS games are beasts—but this course is here to help you tame 'em.
You’ll build out a full RTS from scratch—units, buildings, upgrades, fog of war, the whole lot. You even get a starter project with models and a level, so you can hit the ground running.
Wanna make your units act less like chaos goblins? You’ll build behaviour trees that respond properly to player input.
We’re talking powerful coding stuff too—event buses, ScriptableObjects, config-driven systems—big tools that make your game scalable and pro-level tidy.
Sick of hard coding every single stat or upgrade? We’ve got your back. You’ll make a fully editable system where new units and upgrades can be added in a flash.
Struggling with scaling your projects or levelling up your dev skills? This course shows you how to build smart systems from the get-go, so your game grows with you.
If you’ve already got a decent handle on Unity and C#, and you’re keen to go deeper, this course is perfect for you. RTS fans and future AI masterminds, you’re gonna love it.
You’ll need an intermediate knowledge of C# and to be comfy using the Unity Editor—but don’t worry, we’re not gonna spawn you into a boss fight with no gear. So if you get stuck, think of us as your support crew—arming you with the tools and tips to win the fight your way.
And yep, like all GameDev tv courses, you get access to our awesome forums and teaching assistants.
By the end, you won’t just have code—you’ll have the bones of your very own RTS game.
So, what are you waiting for? Let’s get building!