Heat - Third Person Shooter Multiplayer


"The alarm goes off, we get filthy rich... in coding skills". Let's make a multiplayer third person shooter, partially inspired by Heat (1995) and of course Payday, with a twist.

This series is a "from scratch" series. We will develop the entire game and write all scripts together in the video.

 


For cosmetic purposes, the series uses the following assets:
Polygon - Heist
Polygon - City Pack
Grunge UI Kit

Helpful assets I used in this series

ProGrids 2

*No promoted assets are used, I use them because I like them, your mileage may vary


Course Lessons
Course contains 68 lessons.
Course introduction

In the first part we are going to create a basic third person controller.

In the second part we will add the "shooter" part in the third person.

In this part we will make up for not having aiming animations by creating a procedural aiming system with IK.

This part we will create a system that will allow us to easily make weapons for our arsenal.

This part we play dress up!

In this part we are going to utilize events and scriptable objects to eliminate dependencies.

Following with our non dependent structure we did on the last part, we are going to do some Division's style HUD.

Utilizing a few scripts we made previously (and adding a few more) we can create the logic for our menu with minimum effort.

Let's create a few functions that will allow us to change scenes using events.

With our new style of handling "non-dependencies", let's see how simple it is to pass data from one scene to another.

As mentioned on the previous video, you had an assignment. In this one I'll go over on how I did it so you can compare with yours. Plus we're going to add a few scripts here and there for ease of use, however we are still relying heavily on scriptable object events. I forgot to cover the ResourcesManager.cs in the video, so take a look here https://pastebin.com/jFbi7RWt

In this part we will wrap the UI as far as the inventory and menus are concerned.

Let's fix a few issues with our controller while adding a few extra features.

In this part we add simple ballistics to our weapons and utilize an object pooler to get feedback on the. We also do a few general tweaks in our controller and architecture.

With this part we will add bullet hit detection, create a base for our AI and make it react when being shot, while also adding hit detection per limb etc.

In this part we are going to tweak our NPC reactions to make them more realistic while utilize the weapon manager as well to instantiate their weapons. Bonus, audio scriptables for handling our audio.

In this part we are going to automate populating our scriptable objects lists.

In this part we are adding the setup for the multiplayer part of the game using Photon networking

Let's add both our character and any character from clients in our own version of a lobby scene.

On this part we are going to dive deep into networking architecture, only one foot, the other one on the next part.

In this one we are going to give control of the controller to the player when we are inside the actual multiplayer match. Also, a few changes on our main menu logic concerning Solo play.

For this part we are going to start syncing the controller when we are inside the game while filtering it out when we are inside the game lobby.

In this part we conclude syncing our match state across clients.

In this part we sync the entire controller over the network

In this part we stop being civil with our clients and start shooting.

So™... there is life after death!

In this lesson we are going to see how to sync a timer across everybody playing the same game.

In this part we are going to fix our multiplayer loop.

Let's see how to make a basic FOV for our enemy and some rudimentary shooting.

In this part we are going to see how to handle multiple AI agent behaviors and switching between them with a drop of the mouse.

In this part we are going to make a cowardly AI that goes to cover.

In this part we are going to make a rudimentary director for managing our AI.

Let's fix a few issues we had pending from our last couple of videos.

In this part we are going to remake our project in a more modular and flexible way.

Let's see our new way to move around with entirely decoupled logic.

Let's stop sliding around

In this part we will decouple the camera handling for our game

In this part we introduce a new Input method and we will use it to change the camera state from aiming and not.

In this part we will change states from normal locomotion to aiming. Utilizing conditions.

Actions based on binary substates.

Let's recreate our aiming mechanic based on IK

Let's add items aka weapons.

Let's create a manager that will handle holding and instancing our items.

Let's create the runtime references for our weapons and actually place them on our hands.

Let's add the visual part of shooting our weapons. Ballistics will come later.

Crouching is a great example for layered actions

Let's enhance a bit the visual part of our weapon shooting.

Let's see how to handle reloading with our decoupled logic

Let's see a way to have different ammo types for weapons while still taking from the same pool of ammo types

This video is about implementing the vaulting mechanic we did from our ATPC series, if you want a more detailed look watch Vaulting 1 & 2 from the ATPC series

Let's bring back our Object Pooler so we can shoot things on the next part

Let's create modular ballistics

Let's see how we can let each object run each own logic when it get's hit without having to resort to huge if statements for each different case.

Let's set the ground rules for building up our UI

Let's utilize events once more to decouple our UI logic from the execution

Let's start bring back our multiplayer parts. First up, connect to the master server

Let's create our game rooms #1

Let's finish with our room creation logic

We need a footprint of everyone that's inside our room. Let's do it

Let's manager what get's created and by whom in our connection.

Let's give control back to the player when starting the match

Let's flesh out our multiplayer listener to start syncing our controller through the clients

Let's implement our controller fixes from the third person controller series

Let's join the lobby and visualize the available rooms, part 1

Let's continue with our room join / create logic

Let's join a room created by a different player

Let's start syncing controllers between players