
Welcome to the Unreal Engine 5 C++ Multiplayer Shooter Course!
We discuss important information you need to get the best out of this course
An update about the Discord
We learn about how multiplayer games are architected, and go over the peer-to-peer and client-server models, and learn which of these Unreal Engine uses.
We learn how to test multiplayer in the PIE
We connect two machines via a LAN connection
We learn about the Online Subsystem and how it provides an abstraction layer so we can use the same code for multiple online services
We learn about Online Sessions and how they work
We configure our project for Steam multiplayer
We learn how to access Unreal Engine's Online Subsystem from C++ code
We learn how to create an online session
We create the necessary setup for joining sessions
We discuss Steam Regions and why they can help improve our multiplayer network experience
We actually join a game session
We create our own plugin that can be added to any Unreal Engine project
We create our own custom Subsystem that is constructed alongside the Game Instance
We learn about delegates in the Session Interface
We create a Menu class
We access our own custom Subsystem
Read this important note on the OnLevelRemovedFromWorld function being replaced.
We create a multiplayer online session
We add function callbacks for our Subsystem's delegates
We create more delegates for our Subsystem
We implement joining sessions from our Menu
We track the number of incoming players in the Game Mode
We add a path to the Lobby level
We polish up our Menu Subsystem
We create our Multiplayer Project
Make sure you get this part right. If you can't create sessions, come back to this and make sure your DefaultEngine.ini matches this.
We test an Online Session in our new project
We get our hands on some free assets to use for our project
Follow the link in the resources to see how to retarget animations in Unreal Engine 5!
We retarget animations to our Character from the Epic Mannequin and the Mixamo Skeleton
We create the Blaster Character class
We add a Camera and a Spring Arm to our Blaster Character
We implement the basic movement functionality for our Blaster Character
We create the Anim Instance C++ class and a new Animation Blueprint for our Blaster Character
We learn about Seamless and Non-Seamless Travel and configure our game to use Seamless Travel
We learn about the concept of Network Role and how it works in Multiplayer
We create the Weapon class, which will be the parent for each of our specialized Weapons in the game
We create a Widget that can inform the player when they can pick up a Weapon
We learn how to mark a variable for replication, and replicate the current Overlapping Weapon
We create a Combat Component class to handle combat-related functionality, and create an EquipWeapon function so we can equip Weapons
We learn about RPCs (Remote Procedure Calls), which are functions designed to be called on one machine and executed on another
We add an equipped pose to our Animation Blueprint
We make use of the Crouch function, and take advantage of the multiplayer crouching capabilities built-in to the Character class
We add the ability to aim, and replicate the aiming state to all clients so they can see our Character in the aiming pose
We create our running Blendspace and add axis values for leaning and strafing
We calculate the necessary values to pass into our Blendspace to lean and strafe
We round out our animation Blueprint with Idle and Jumping states
We add the ability to crouch walk
We add an Aim Walking state, allowing our Character to change its speed and pose as we aim while walking
We extract animation poses from the Aim Offset animation, and convert them to additive animations
We apply our aiming poses to an Aim Offset asset and test its functionality
We discuss how rotational values are serialized and compressed before being sent across the network
We implement our aiming and hip Aim Offsets in our Animation Blueprint
We use Inverse Kinematics to place the left hand on a socket on the Weapon so our grip is always correct
We implement an algorithm for turning in place when our Yaw exceeds 90 degrees
We use a Rotate Root Bone node in our Animation Blueprint to implement turning in place
We discuss the Net Update Frequency, a variable that determines how often an Actor will be considered for replication
We add crouching capability to our Character when unequipped
We create rotated running animations for leaning
We add footstep and jump sounds to our running and jumping animations, and make sure they have sound attenuations
We discuss the difference between Hit Scan and Projectile Weapons, and create our first specialized weapon type: the Projectile Weapon
We create a weapon firing Animation Montage and play it in response to user input
We add Weapon firing effects so we can see and hear gunshots
We implement our fire effects in multiplayer so all machines can see when someone fires
We calculate a Hit Target vector so we can launch our projectiles precisely
We spawn projectiles when firing the weapon
We add a Projectile Movement Component to our Projectile class so it can fly through the air
We add a tracer to our projectile so we can see rapid-flying projectiles
We send the Hit Target data to the server so it knows where to launch the projectile
We bind a function to the OnHit delegate on our projectile's collision box
We create a class for bullet shells and spawn bullet shells from our weapon when we fire
We add an impulse to the crosshairs so we can launch them from the weapon, and play shells sounds with a Hit Event
We create a Blaster Player Controller and a Blaster HUD class for our game
We create a function for drawing the HUD textures to the screen
We add the ability to spread and shrink the crosshairs based on in-game events
We transform the right hand so our weapon always faces the direction we're shooting
We zoom in while aiming our weapon
Shrink Crosshairs when Aiming
Change Crosshairs Color
We extend the starting point of our line trace so we never hit our own Character or shoot in the wrong direction
We implement hit reactions when our projectiles hit the Blaster Character
We eliminate jitter for all simulated proxies in our game
We convert our weapons from semi-auto to full auto
We increase our Server Net Tick Rate to 120 and test the game in true multiplayer
We discuss the Unreal Engine Game Framework and how classes work in multiplayer
We create a Health variable and a Character Overlay widget to display a Health Bar
We create the system for updating our Health in the HUD when our Health value changes
We add the ability to damage players when our bullets trigger hit events
We create the Game Mode for our Blaster Map
We create an animation for when the player is eliminated
We learn how to respawn the player at a randomized Player Start location
We create a custom dissolve material for when a player is eliminated
We learn how we can apply the dissolve material to the Character mesh
We create curves for changing the dissolve material dynamically and add a Timeline Component in C++
We disable player movement while still being able to rotate the camera when eliminated
We add a particle effect for an elim bot to beam the player up when eliminated
We discuss the OnPossess function on the Player Controller and how to use it
We create a Player State for our Blaster Character so we can keep track of Player Score
We track the number of Defeats for the player
Optional challenge
We add Weapon Ammo and display it on the HUD
We implement some checks to make sure the character can fire
We implement Carried Ammo so the player can have ammo on their person in addition to Weapon Ammo
We display the Carried Ammo in the HUD
We implement reloading our weapon using our Carried Ammo
We add a Reloading Combat State to our Combat State enum
We prevent the firing of our Weapon when not appropriate to fire
We update the ammo when reloading
We add some effects to accommodate our Weapon Reload
We auto reload when we run out of ammo
Optional Challenge
We implement a working game timer and display it in the HUD
We use the round-trip time to sync our client and server time so all clients and the server display the same value in their countdown timer
We discuss the Game Mode's Match State and how we can utilize it and even create our own Match States
We look to the Game Mode to see how it reacts to when the Match State is set and we follow its example
We add a warmup timer for the Waiting To Start Match State
We update the warmup time while in the Waiting To Start Match State
We create our own Custom Match State for the match Cooldown
We create an announcement for the Cooldown State so we can display the winner
We implement restarting the game when the Cooldown timer has finished
We create our own Game State so we can keep track of the Top Scoring Players
Optional Challenge: Blinking Countdown Text
We create a Rocket Projectile class for Rocket Launchers
We create our own Niagara System for the Rocket Trail
We spawn our Rocket Trail Niagara System when we launch a rocket
We create a custom Projectile Movement Component so we can handle how our rockets behave with more control
We create a Hit Scan weapon class and implement its functionality
We use Beam Particles to see the trail for our Hit Scan Weapon
We create a Submachine Gun Blueprint based on the Hit Scan Weapon class
We add physics to the strap on our Submachine Gun so it flops and dangles dynamically
We create a shotgun class based on Hit Scan Weapon
We devise an algorithm for creating random scatter for our weapons
We create a Sniper Rifle Blueprint based on our Hit Scan weapon class
We implement a sniper scope for sniper rifles
We create a Grenade Launcher based on Projectile Weapon
We create a Projectile Grenade class and configure it for Grenade Launcher Grenades
We add reload animations to our reload montage so each weapon reloads differently
We handle Shotgun reloading differently than all the other weapons
We add a weapon outline effect so our weapons are more easily visible
We create a Grenade Throwing montage so we can throw grenades
We handle attaching the weapon to the left hand while our right hand throws a grenade
We get more assets for our throwing grenades
We toggle the visibility of the grenade in our Character's hand while throwing it
We spawn grenades when throwing them
We configure grenades for a multiplayer game
We display the number of grenades in our HUD
Optional Challenge: Create a new weapon!
Over 64 hours of content!
Learn all about Unreal Engine multiplayer in this fully comprehensive C++ course. From scratch, we create a complete multiplayer shooter game, capable of creating and joining game sessions and connecting many players across the internet. We'll create our very own custom plugin that can be added to any Unreal Engine project to easily turn it into a multiplayer game.
We learn how to optimize our game for the best performance, as competitive shooters require the highest performance possible. We'll implement lag compensation techniques such as client-side prediction and server-side rewind, so the game performs smoothly even in the presence of high lag!
We learn how to use the proper game classes for each multiplayer mechanic. Custom match states, warmup/cooldown match timers, Elim announcements, HUD with health, shields, ammo and grenades, and more! We keep all important functionality on the server, to prevent cheating, and learn the proper way to use the Player Controller, Game Mode, Game State, Player State, Character and Game Instance classes.
We make assault rifles, pistols, submachine guns, rocket launchers, grenade launchers, sniper rifles and throwing grenades! All functional in multiplayer, optimized for best performance.
After this course, you'll be able to create any multiplayer game you want. If you can do a fast-paced shooter well, you can do any game, because fast-paced, competitive games require the best performance possible.
This course assumes that you have knowledge of C++ programming basics. Knowledge of variables, classes, inheritance, and object-oriented programming is recommended to have the best experience in this course.