Make a Co-op Multiplayer Game in Unreal Engine 4

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
in this video we're gonna be taking this very simple platformer game that we made recently and we're gonna get it working for multiplayer as you can see here the player can approach open the door both players see the door open this player can come in and finish the game and this player is like whoa wait for me bro i want to finish two wow i finished yay we'll also make it so the players can collect coins we're gonna make it so sprinting works on the multiplayer we're gonna make it so these checkpoints work and we also make it so these power-ups work all for multiplayer we also have it so where the player falls off and dies he responds at the checkpoint yay and before we get started consider subscribing especially if you enjoyed the video hit me with that subscribe button like the button leave a comment tell your friends about the video multiplayer is pretty difficult so i'm going to try to make it as easy as possible in this video and then i want to extend this project as well and just keep doing more multiplayer features and if you want to take your skills to the next level after you complete this video check out my courses here i got three courses they're 20 bucks each this is my most popular course and it's pretty long it's about 25 hours at this point i've also got a first person shooter and a top-down dungeon crawler they're all built for multiplayer from the ground up so if you really want to learn multiplayer then check out my courses link below in the description yay so if you haven't gone through the first video where we set up this project it's okay you can download this project yourself on the marketplace it's free and it's provided by epic games you'll still be able to follow along even if you haven't gone through the beginner tutorial what we'll be doing is taking these blueprints here and setting them up to work in a multiplayer game so if you're new to multiplayer in unreal engine 4 i think this will be a pretty cool tutorial it's going to be long it's going to be hard but multiplayer isn't easy and i'll try to make it as easy as possible but definitely pause and rewind at times when you get confused and you'll see that even i get stuck sometimes and i have to start debugging which in my opinion is the most important skill so watching me debug and solve problems that will make you a better game developer so if you're ready go ahead and download this project and let's get started but i'm putting the start location here because we have everything here that we can test with we got the checkpoint that we need to test with we have the jump boost and then we have coins up here that we'll be able to test and the ui and stuff like that so this is just a good place to put the player start for now so unreal engine comes with multiplayer out of the box even in their documentation they kind of recommend to make your games multiplayer compatible no matter what even if it's going to be a single player game because the way the engine works is that if it's single player you're technically the host or the server so if you come up here and you click the arrow it says net mode play as standalone this is basically playing as single player so for testing multiplayer in this drop down arrow you're going to want to test as either standalone or as listen server to test as the host so this would be testing as if you created the game right you're setting up the host you're in charge of the lobby you are the server and your friends are going to connect to you so the game is just going to run as if it was single player as we had it before no change really but anyway you can see that there's no issue picking these things up picking up the coins everything's good that's why so if you develop your game as single player it's you're basically you're basically developing it as you being the host even if your game will never have multiplayer so that's why everything works fine when testing as listen server now to really test the multiplayer you're gonna have to play as a client here so now you're gonna be playing as if you're connecting to a server you're joining your friends game they're the host you're the client you're connecting and now you're going to start to notice a lot of things being broken here the checkpoint might work not sure but when i hit this thing notice that it doesn't go away when i fall off the edge i'm not going to reset when i stop playing i get these hud bugs here or these errors we'll fix that and what i like to do is i like to test with two players so i'll test with two clients if you saw my climbing system tutorial this is what we were doing you can see i have two windows here and here's the other player just moving around we know that this doesn't disappear but you can see that the jumping at least is replicated so the jumping works but the actor itself this object does not disappear at least on the clients screen now another way to test is with two clients but play as a listen server what this is going to do is i'll show you so what's happened here is this big window you can see i have the ui drawn here this guy here this is actually the server the small window on the right this is actually the client you can see in the window it says client one so let's see what happens when i pick up this gem here or whatever this power up it's probably going to disappear on the server screen but not on the clients so let's see yeah so you see how it disappeared on the server but it didn't disappear for this guy so what's happened is the server has deleted the object but the client doesn't know it got deleted but it actually is deleted so even though it's on the screen for the client it's actually not there in the game now when you see it pop back up on the server that actually means the object is in the world it's just that the client hasn't been updated because the actor itself the power up isn't replicated so hopefully a little bit of that makes sense but i'll try to make it all make sense soon so the question is how do we make this jump boost actor replicated so that it disappears on the client screen so before we get into this jump boost power up and make it work for the client at least visually so it disappears the first thing i want to do is fix that error so i'm just going to put in one player in here and test as a client and so the very first thing i want to do is get the hud drawn on the screen so right now any clients don't have the ui there's just no ui so that's what we're going to work on first and if we open up the game mode this is actually where the hud is being drawn so the hud is being drawn in the game mode which isn't going to work for multiplayer and the reason why is because this gamemode class only exists on the server it doesn't exist on any clients and that's for you know cheating purposes right you only want the server to have the rules of the game that's what the game mode is meant to do it's meant to store you know the rules and things like that but because this project is designed for single player most of the stuff you see going on here in the game mode just we're gonna have to move to either the player controller or the character here itself so for example this respawning this is on the game mode which means only the server is able to respawn so when the player jumps off the edge of the world here only the server is able to respawn and that's because the respawning code is in the game mode which only the server has but we'll do some code to make it so that the game mode can tell the connected players to respawn but first what we're going to want to do is we're going to want to make a player controller so right now the project is just using the default player controller class we need to make a custom one because the player controller is really powerful in multiplayer games the the player controller is replicated it exists on both the server and the client so you can run server commands through the player controller you can also do server stuff on the character but for stuff like ui and things like that i like to keep on the player controller and the reason for this is the player controller exists throughout the play session so a good example here is when the player jumps off and dies what's actually happening is that the character itself is being despawned it's being destroyed and then the game mode spawns a new one like it's just a brand new fresh character and if when that happens you would have to reload everything because you're reloading the actor so the player controller doesn't get destroyed though it's just the character getting destroyed the player controller still remains it's not destroyed so you can do a lot of functionality that you want to persist on the player controller so that's why the player controller is really good for doing things like the hud and the ui and you can even do you know respawning you can do respawning on the player controller and things like that so i'll show you how to set all that up in this video but the first thing we're going to do is this hud so i don't want to do it on the character here like i said because the character gets destroyed and then he gets respawned so instead we're gonna make our own playercontroller class so just right click blueprint class and then playercontroller let's call this the platformer controller ep underscore platformer controller and then we need to hook this up to the game mode here because if you come over to the world settings over here it has the game mode that we're using we're overriding the game mode here which means this third person gaming mode here this is what's going to run on the level and like i said only the server has this information so we want to tell the level basically to use our custom player controller so i'm just going to select our player controller here and then actually here in the game mode in the defaults we can plug it in right here in playercontroller class just like that and you can see we've also plugged in the epic character here so now if i go to the level go to world settings and it shows our bp underscore play uh platformer controller so now we're ready to use the player controller so let's open it up go to the event graph and it's going to be blank completely and what we want to do is we want to tell the player controller here to draw this stuff here we want the player controller to do this now so i'm actually going to take this i'm going to cut it with ctrl x and then in the platform controller i'm going to paste it so we'll do this and we're not going to use begin play for this and what we're going to do here is i'm going to right click this variable and create variable so now this code is ready to run on the player controller but we need to tell the player controller to do it so a lot of people make the mistake and they do a begin play and they go like this this is actually a mistake this is an error you don't want to do it this way for multiplayer you can do this if it's a single player game but for multiplayer you don't want to do that instead what we want to do is create our own event that runs on the client only so the client can draw the widget here the ui to the the player right so so each connected player will draw their own individual widget to the screen so we need to use a custom event so just right click type in custom event and then this is gonna be a client only event and so for those i like to do client underscore and then whatever name some people do like cl underscore but i just like to go client because it's just easier for you to understand so client draw hud or ui whatever hook this up here and then in the right up here we want to make it run on owning client and then reliable so this makes it so that only the players player controller runs this just the individual player it's not running on the server or anything like that so basically what happens is anytime you know one of your friends joins a server or you join the server this new platform controller is going to be created just for you and the game mode is going to tell that player to draw this hud so every time a player joins the game the game mode is going to tell that individual player to draw the hud so the way we do that is in the game mode there's actually a special event for this you can right click go to add event go to game and this there's an event here called on post login or event starting new player so both will work so i'll just bring out both the events here so this new player it says player controller object reference same here it says player controller object so both of these will work i'll just do this one because it logically it just reads it makes more sense handle starting new player so off of this i can cast to the platformer controller or if you want to use interfaces you can but i'm not going to teach interfaces in this video i do prefer them though when it comes to multiplayer but then off of this we can call our new draw hud so i can go client whoops client underscore draw hud so every time a player joins the game this event is going to run and this can tell that player to create the hud and as you can see i'm playing as a client and the hud got created now we don't have a character yet though well for whatever reason this handle starting new player this is actually the bug it's not letting us spawn as the character here so maybe i just don't understand it exactly we'll just use the on post login this one will work so use on post login and now i'm able to spawn as the client with the ui so now all players will have the ui on their screen so yeah use the on post login i'm not sure why the other one's not and now the next thing we want to do is make it so when the player hits this power up the power up will actually disappear on the client screen as well so i'm just gonna select the power up and then click edit bp jump boost so here we go so all of this code we're gonna have to really convert to work for multiplayer at least the parts that matter so let's go to the class defaults and then under replication let's turn on replicates so this makes the item basically replicate from the server to clients so that the clients get updated when something happens to this item so in our particular case here when the client hits this jump boost we want it to replicate that it's being destroyed so in this event here begin overlap it's going to update all this stuff here and then somewhere it destroys it or it hides it yes that's it hidden right here so let's just see what happens playing as a client just setting the actor to replicate so i hit it and it disappears and we can now jump high and then it comes back so we'll hit it again so just setting the actor to replicates has it working correctly here now you see we do get these bugs now these are multiplayer issues and if we read the error so if these errors are like foreign to you you don't understand what they mean i'll walk you through this error here because this error is only going to happen on multiplayer so basically what this means access none that means there's a variable somewhere that isn't being read so in this case it has to do with the hud ref right this w underscore hud ref and this error is happening in the bp underscore jump boost so that's happening in our jump boost actor here our blueprint and specifically it's happening at this set color and opacity so right here this is where the error is happening and specifically this error is happening because we're trying to access the game mode on the client but you can't do that remember what i said earlier about the game mode the game mode only exists on the server but what's happening here is the client is trying to talk to the game mode here and tell it to update the player's hud so another thing to keep in mind is that we moved the hud off of the game mode it's not even in the game mode anymore it's now in our new player controller so we need to access the player controller and update the hud that way so we're actually going to get rid of all this stuff here or not that we'll keep this stuff here we can keep this but this needs to go so delete that because we're now doing in the player controller so off of this other actor we can type in controller we get instigator controller but we might also be able to just cast straight to the platformer controller let's see yeah so we can cast to the platformer controller so this is what we're going to try first and with this we can get the hud reference now because in here we have our new hud reference so back in the jump boost i'm going to type in git hud and we can get our hud reference we can actually plug it in here and then delete that one so now we're going to test this first as the listen server so when i run over this it should update and nothing happened there you saw that the object didn't disappear at all that means that this cast failed so i think we have to go with this the get instigator controller and then we can go in like that so let's try this way now so walk over the object and then now it updates and in the bottom left it's now fully like it's not faded at all so we know that this is working for the server at least but does it work for the client let's see so we want to test as a client now okay so we walk over it you can see it does update for the client so now we have more errors but it's less errors than before so now let's see what this next one's about i'm going to click the end here so the error takes us here once again and you might be saying like wait why is there an error the hud definitely updated so what happened here is that the client overlapped the sphere and then we told the client to update the the color and opacity but what happens with these collision overlaps is that these overlaps are actually running on both the server and the client they're running on both and so in this particular case the client this all worked correctly for the client there was no errors for the client but the server also tried to do this and this is kind of confusing but it's important to understand that the server cannot access the connected client's hud so when the server tried to run this there was a but it's a bug it's bugging out the server is like oh i don't have access to the player's hud and if you think about it from the server perspective the server is just you know the host right the player or it might be a dedicated server and in that case there's no hud on the server for each individual player the the ui the player ui that's just a visual that's being drawn on that player's monitor and the server is not drawing it it the game itself is just drawing it on the client's computer so what's happening here in a multiplayer game with this code is that the server is being told to also do this stuff here and that's just not going to work because the server doesn't have control of the client this this hud only got drawn on the owning client not on the server so what we actually want to do to fix this is we want to make a custom event that runs only on the client that will do this stuff here so i'm going to copy this stuff here and here in the client i'm going to paste it you can actually get rid of that and then we'll just take this and plug that in let's make another custom event we'll say set color and opacity up here make it run on owning client plug it in and now what we want to do is we want to take this color and drop it here okay so now what we're going to do is we're going to have the server send in the color to the client this is really how you do it you want the server telling the client what to do so back in the jump boost here we have this color here if you open it up it's just one one one one that's easy to remember so i'm going to delete all this here and instead off of this i'm going to go client set color and opacity plug that in and by default it's black but we want to make it 1 1 1. okay so when you compile that you're gonna get a little bug here just disconnect this for now we'll come back and we'll fix this but now i'm gonna test as a client and now when i hit the object updates in the lower left corner when i exit out there's no more errors so we have now fixed this issue here so now the server is telling just the owning client just the one player that's overlapping this to update the ui instead of having the server try to do it so now what we want to do is use this same event way down here so just copy this event paste it here open this up let's see 111.3 okay so i'm going to click this 111.3 connect that delete that and now the target we need to plug in this right here so i'm gonna take this pin go all the way down plug that in now let's test one more time so when you're doing multiplayer you have to test all the time so now i run over this and after like three seconds or whatever it should go back to point three which it does not so let's see oh i didn't set this to point three what the heck come on i thought i set that to point three so let's just see so it's at one right now and now the opacity goes back down to 0.3 so we are doing good now let's test with two clients this is like two connected this is like two players joining a server okay so both players have the ui so i'm going to run over this okay so you see update player is now jumping and it respawns perfect so now what i want to do is i want to go through this code and just make sure that it's all set up for multiplayer so this stuff here this jump velocity seems to be working fine i don't see an issue with it when we play this is okay because this is running on the server that's all good this is fine and i think everything is working here so that solves this jump boost so now we have jump boost working for multiplayer yay okay next thing we want to do is i want to do the respawning so when the player falls off they'll respawn in the correct location so right now what we have right here is this absolutely will not work because this is just on the game mode only the server will ever respawn so we want to fix this this stuff here is okay we can have the game mode storing these spawn locations that's fine but this stuff here so get player character player index zero what this means is that only player zero player zero will be the server every single time because if any of your friends join the game it starts counting up so you know you make a game your player zero your friend joins the game that's gonna be player one and then another player joins us player two so this get player character this function you generally only use in single player games you don't use it in multiplayer because this will only apply to the server so all this stuff here is just being applied to the server you can see here they're using the get player controller so so just like with the get player character this get player controller is very similar player index 0 that's just the server player controller no one else so we don't want to use this for multiplayer so i'm going to disconnect this stuff here and instead we'll do this on the on post login so i'm going to grab this and move it down i'll delete that so now we just have these two that's fine whatever so a player joins the game and we can plug this into this bind event so now this destroyed event is now bound to the player controller instead of the character so when a player dies it will respawn at the spawn location which we're gonna have to fix that as well but now what we want to do instead of this get player controller we want to delete that and i'm going to plug in this new player here but again i'm not 100 sure if this will work if it doesn't work we'll just go make our own respawn logic in the player controller here but i wanted to try this before deleting it so first i'm just going to test as the host see if it works for the host so the host falls off okay so it doesn't work i don't want to spend time trying to get this to work so we'll just make our own respawning function in the playercontroller so what we can do here in the epic character is if we go to add event actually we have this event destroyed so let's test this out right here i'm going to do a print string and this is how you debug things you're going to want to be doing lots of debugging and print stringing and things like that when you're testing multiplayer so i'm going to say destroyed we'll make this red and i'm going to test this as a client so when i jump off the cliff here what i want to happen is in the top left corner i want to say destroyed when the character dies okay so the top left both the server and the client say destroy that's exactly what we want so now what we can do is we can go to the player controller and tell it to respawn so so right click go to get controller and actually we're going to go through the game mode and then to the player controller so this is kind of advanced here but i'll show you what i mean the game mode has this respawn function already so i'm going to delete all this stuff here delete that delete all this and we'll we'll save this for now but we're going to do something with it so in the respawn function here go to input and we're going to add a controller input and the controller input is actually this right here so you can see it says controller object reference so in the game mode here let's go controller you get this controller right here so it's not a player controller it's actually the class above it it's the parent of the player controller called controller we'll just say controller and so now back in the character we're going to type in get game mode and now from here we're going to cast to third person game mode that's the game mode we're using and then we're going to call respawn so now the respawn is act asking for a controller here so we're going to take this controller and plug it in so now we go to respawn here and we want to tell the controller to respawn the player so the logic that we're doing here is the character tells the server which is the game mode right the game mode only exists on the server so we're going to the server first and we're telling the server hey i just died server can you please respawn me and the server is going to go okay let me get your playercontroller and respawn you that's basically what's happening here but we want to do the spawning on the playercontroller and i'll show you why we don't want to do it here so in our player controller we want to make a new custom event call it server underscore respawn up here in the right do a run on server reliable you actually don't have to do this i'm just doing it to help you understand but but you could actually leave this as just not replicated and the reason why is because the game modes going to call this event and because the game mode only exists on the server this event will always be on the server no matter what so doing all this run on server reliable for this specific event is just tedious you don't have to do that but just to help your brain understand what's going on i'm going to leave it so now what we want to do is we want to do this respawn stuff here this is what we want to do in the player controller so so i'm going to paste this into the player controller and then i'm going to take this transform and drop it so now we can come back to the game mode i can copy this here i can plug this in and now we can call the respawn delete that and now we can plug the spawn location into here so the game mode the server is sending the spawn location to the specific player controller of the player that just died and it's going to respawn the player now player controllers also exist on the server so the so the player controllers are really powerful they can run these server events and so you might be saying well why don't we just go straight to the player controller from the character why did we go to the game mode first and the reason i went to the game mode first is because i like the game mode to handle respawning of players i just think it's better to do it that way but you probably could have just cast it straight to the player controller from here and done it but i think it's safer to go to the game mode so we do it this way so go to the game mode and the game mode says okay you can respawn and then off of this we want to go possess and the target is self that's fine because it's just the player controller so now let's run this as the listen server just to see if this works so i'm going to jump off and it doesn't work i'm not sure why so i'm gonna do a print string here just to debug and if it says hello then that means the code at least got to this point if it doesn't say hello at all it means the code never even got to that point okay so it never said hello so the code never even got here so let's debug let's go backwards and again welcome to multiplayer we just have to keep going backwards here so let's do a print string here let's see if this respawn event ever gets called i'm gonna put a print string hello look in the left corner see if it pops up okay it does it says server hello so now we gotta ask ourselves okay somewhere between here and here something's breaking so off of this failed i'm gonna do a print and if this says hello it means that this cast is not working and it says in the left it says hello so that means that this cast is failing and to debug that what i'm going to do is i'm going to do a print string here and then i'm going to plug in this controller here so i'm plugging that in and i want to see if this reference is just null if it just doesn't exist anymore i'm not sure so let's just go find out let's kill ourselves yeah so the server says nothing off of the print string that means that this controller reference is no longer existing so now that we know that this is null and void that this just doesn't this controller reference no longer exists we got to go backwards again so we're going to go back to the character now where we're actually calling this respawn and that means that this controller reference here is null which makes me suspect that on event destroyed this controller reference gets destroyed so let's do a print string here let's plug it in and let's see if that's the case if the print string says nothing then we know that the controller is getting destroyed for some reason yeah so it says nothing that means that this is getting destroyed so there is another way that we can fix this what we can do in our platform controller here in our player controller we can go to add event we can go to event on unpossess i'm going to do a print string i'm going to plug this in if the print string fires and says the name of the pawn then we're going to use that event okay so it says server epic character so so what's essentially happening here and the reason why this code isn't working is that on this event destroyed the controller is actually getting like unreferenced it just doesn't exist anymore so we actually cannot use this code so what we're going to do instead is we're going to copy this stuff here so just copy it go into the platform controller and then control v so paste this here so now we're going to use the event here now for this controller you can type in get self plug that in so now what's going to happen is that this event runs automatically when this character gets destroyed we can actually delete this here we can delete that this character gets destroyed this event is going to run it's going to fire the respawn here and we can now make this controller we can now make this a bp underscore platform controller reference we no longer need this we just plug this straight in and the reason we're going to the game mode actually is because we want to get the spawn location from the game mode only the game mode has that and that's fine but we're probably gonna have to change this as well when we get to the actual checkpoint blueprint but for now let's get this working so then this will run and it will spawn okay now let's see if it works we jump off okay we're still not responding i don't know why i'm just going to keep debugging this until we get it this is just what you got to do when you're multiplayer programming so we jump off so that print string ran which means that this is actually being spawned somewhere so it's not being possessed and i think this has to do with maybe this getting fired too early so i'm what i'm going to do is i'm actually going to do like a delay let's delay for like one second let i think this is one of those multiplayer issues where the game just needs to catch up so run this as a client actually let's jump off yay okay one second yeah okay so it is working it's just we had to add that little delay but this is the code now so when the player jumps off and dies this unpossessed event gets ran and this only runs on the server no matter what we go to the game mode we tell the player to respond at the spawn location and then we respawn the player and possess them one second later so you need to have this short little delay there just so the server has time to catch up and get the player to possess it so now let's do two players here so here's client one he's just gonna stand here and look for the player to respawn and so i'm gonna have this player just run off and die so he dies and he gets repossessed so there we go okay so that's two things that we've gotten to work for multiplayer now so the next thing i want to get working multiplayer is the checkpoint here so let's click this checkpoint and then click edit bp checkpoint so we have to convert this to multiplayer so number one in the class defaults let's check replicates and now let's see what happens so these overlap events they happen on both the server and the client in this particular case we only need the server actually doing this stuff here the server can mark the checkpoint as true but you know we'll just leave it as is but this stuff here this stuff needs to be we don't want to store this spawn location in the game mode anymore we wanna we wanna store the spawn location in the player controller because the game mode only exists on the server so any clients that walk onto the checkpoint the spawn location is gonna get sent to the game mode so only the server has it the client will never have it so what we want to do is actually store it in the player controller i think we can keep this stuff the same though for the most part so let's go to the platformer controller let's make a new variable call it spawn transform make it a transform here and then set its replication to replicated now i'm going to drag it off here and i'm going to plug it in here so we're actually not going to use this anymore so i can delete that and then now back in the game mode you're going to have a bug here so just delete that and then recompile and then now we want to set this so let's make a custom event it's going to be a server event so i'm going to call it store player or store spawn transform or or maybe just set spawn transform but this might read better and just make more sense so let's go run on server reliable and now remember the servers can be sending in the information so what we want to do is we want to set the transform and then drag it here so we're going to call this event from the bp checkpoint here and we're going to send in the transform to the controller here and set it so kind of like what we did in the jump boost here where we did this here we're going to do this stuff so i'm just going to copy this and then in the checkpoint i'm going to paste it so i'm going to delete these two things and delete that one there we go put this here now we want to grab this other actor plug it into here hook this up and then our event is called server store spawn so drag off server underscore store spawn transform hook this up here and then plug that in and this is a server event so only the server will actually store it remember that both the server and the client run these overlaps so anything that you only want to be done on the server you'll want to put in a server event and now i'm just going to test as one client and i'm going to move this over here i'm just going to move that there and now what i'm going to do is i'm going to jump off and die so i jump off i die and i respawn like way far away in the middle of nowhere since i'm like stuck here and the reason for that i'm actually at 0 0 0 so i'm going to press f8 i'm in this rock here and i remember because i set this as 0 0 0. so if you look at my location 0 0 0. so the reason for that is because this spawn transform by default is zero zero zero so by default we are spawning or respawning at zero zero zero now when the player steps on the checkpoint it's going to set this spawn transform to a new location which is this location here whatever this is you know 9935 and then so on and so forth it's going to set it to this location so now i spawn in i step on the checkpoint now i'm going to jump off and die now i respawn on the location this was this was an issue in the in the first video i did the scale is 1.8 and it's setting our player scale to that we don't want to do that so what i'm going to do is i'm actually going to right click this and split it right click split and i only want the location in the rotation i do not want to change the scale i want to keep the scale at 1.0 so my player spawns the same size so i spawn in i make sure i touch the checkpoint before killing myself and then when i respawn i should be one one one so yes i am okay there we go but now again this is multiplayer programming always try to test with two clients so this client's just gonna stand here and then this one's gonna come over he's going to hit the checkpoint and then if everything goes well he'll spawn on the checkpoint there he is so he spawns he's like yeah i'm back what's up dude now we don't want the player spawning at 0-0-0 just in case the player forgets to hit a checkpoint so what we want to do is we want to actually set this spawn transform to the location that the player is at when he spawns in the world so to do that we need to come to the epic character and on begin play here i'm just going to remove these things because we're not using them in this video what we want to do is we want to tell the player controller that location so the way to do that is on begin play when the player spawns into the world we do a get actor location or actually get actor transform now this will be that location so right now we have this player start right here so this location rotation and the scale here this is what this value will be right here if we did a print string and plug that in it would start it would read off the it would read off this transform right so what we want to do is we want to type in get controller then we want to cast to our platformer controller and now we just want to make a simple event where we update that variable a server event because we want the server to hold the information of this spawn transform that's what we said to replicate it so let's do a or actually we can just call this we call the server store spawn so we just go server underscore store spawn transform plug that in compile so now when i jump off even though i haven't stepped on that checkpoint it should spawn us back at the player start yep there we go okay now the next thing we want to do is sprinting so as a client if you hold down shift and try to sprint you do not move faster you kind of glitch around but if you play as the server the sprinting works fine and that's because the way the sprinting system is set up is only to work for single player so let's go fix that here it is in the character the epic character so the way we get sprinting to work for multiplayer games is you have to tell both the server and you have to replicate it as well and this is kind of like the basics of multiplayer really so these input actions always start from the client right you click the mouse button you press spacebar whatever what's gonna happen is this is coming from the client like you press it it's coming from the client if we just do this right here without changing this around the situation you have here is the client is trying to update the character movement and that's just not going to work server what's happening is the servers can say no you're not sprinting because i don't even know about it the server has no idea that the player tried to sprint so that's why you have that jittering so what we have to do is tell the server that the player is trying to sprint so the simplest way to do it is to make a custom event server underscore sprint and what i do is i drag one of these here we'll just call this the speed and we can make it run on server reliable and now what we do is up here we want to call the server sprint plug the walk speed back in here so we have the sprint speed up here we have the walk speed we're going to keep this here because this is just going to run on the client but we also want it to run on the server so then we plug that in here call this again plug walk speed in there and then on the event here you wanna copy these two things here and then plug this in so we're gonna do it on the client but then we're also gonna do it on the server so now i'm gonna play as a client so now i hold down shift now the client can sprint we but just to make sure let's test with two okay so we have this player here and now i'm going to control this guy you can see he's just walking but then he presses shift now he's sprinting see so you can see that it's working on both multiplayer and single player now and both players can see it both clients yay we okay but now next we want to fix the coins we want to get the coins working for multiplayer now and this error happened because i ran over a coin see bp coin add coins to ui so we need to fix that so let's go ahead and click on a coin here open it up and now let's get this working for multiplayer so first things first we obviously don't want to be going to the game mode anymore we want to be doing this on the player controller now so we need to go into the player controller and make a new variable called coin count because we used to store the coins on the game mode but we're going to do that this stuff now needs to happen on the player controller so let's go to the player controller add a new variable called coins make it an integer and set it to be replicated now we want to make a new custom event server underscore we'll just say add coins or something like that or rather let's make it update coins in case you want to you know add a store to your game or something let's just call it update coins run on server i'll come out here let's do a set drag it in like that okay so now we're just going to use this event to update the new coin amount so now back in the bp coin we don't want to do this anymore we want to remember we want to get the instigator controller and we want to cast to our platformer controller so now we can delete this well i don't want to delete it yet actually because we're doing several things off i'm just going to move it out of the way but now we kind of want to do the same thing so let's get type in get coins and now we want to add plus one so i'm just going to plug that in there delete that now and then we want to set the coin amount well this is how they did it but we're going to do a little bit better we're going to call our update coin event here so just drag off here go to server update coins and that's what we'll connect the plus one here so we'll add plus one to whatever the coin amount that the player has and then we'll set it here so now we'll delete that delete and now the next thing it was doing was updating the hud but we're actually gonna do that in the player controller because the server can't do it so so what we can do now in this event is we can update the hud but remember the hud only exists on the client so we actually need to make a new event for this so custom event client update coins ui up in the right do run on owning client reliable and you know i'll make a new input of type integer and we'll just say coin amount so now the coins get updated and now we can call the client update coins ui we can plug that in i'll put the event up here so that you can see this is all kind of happening in one go and so what we want to do is if we go to the coin they're calling this add coins to ui event so let's actually double click this it's going to open our ui here so here's the player ui it's going to open it and we have this event so this event isn't going to work for what we're doing here because again they're going to the the game mode which we can't do for a multiplayer game but the solution is really easy we can just take this event here and add a new input of integer and we can type in new coin amount and then now back in our platformer controller we can bring out our hud reference and we can call this same event here so the name of it is add coins to ui so right here i can drag off add coins to ui plug this in and now let's go clean up this event so double click it again we can delete all of this right here and then take this and plug that in here connect that drag it over so it's a little cleaner and then now i think we're good to go so let's just i'm just going to test with one client and now i'm just going to run up here and now when i get a coin you can see in the lower left we're adding we're okay so this is actually i'm glad this happened we're adding two coins every time we hit this so i'll show you why so the reason why is because i actually want to connect this to so let me go ahead and delete that and connect this delete that delete that okay so the reason why this is adding two at a time is because if you recall these overlap events are getting called on both the server and the client so if i do a print string here and type in you know just a long text there make it red when i overlap a coin up here it's going to say it twice see it says it on both the server and the client so what's happening is that this coin amount is being added twice so it's actually going up twice because both the server and the client are doing it so what we want to happen is we only want this to add on the server so there's two ways we could do this we can make a custom event here and just have it run this on the server only this these things here we could do a switch has authority which i didn't get into in this video but you could do this and this makes sure that only the authority aka the server runs it but then there is a third way which is we just add the amount on the player controller so i think that would be fun just to show you how that would work so what i'm going to do is delete this and then right here server update coins i can just do one like this and then right here i can type in coins to add and then we can do this addition on the player controller because it's just going to run on the server so i can bring out our coins and then let's just do some simple integer math so int plus int we'll take the amount of coins plus the coins to add and set that make that the new coin amount and then now in bp coin we can say how much to add so maybe we want to add like watch if i do like 15 every time the player overlaps a coin on the map it's gonna add 15. so this actually gives your coin blueprint more options so now you can set each individual coin right so it says 30 60 90 okay so actually we still have to do the switch as authority here so we'll just make this a custom event here i'll go custom event server add coins run on server then now server add coins plug that in take this and drop it in there and then plug that in there and then connect this plug that in okay so now this is what our bp coin blueprint looks like so now this should only run on the server now okay let's see it should just say 15 not 30. okay 15 30 45 so now it's working correctly so now that's really cool so we can say how much to add here now to take this to even the next level we could right click this make it a variable you can say coin and then up here we can say instance editable and then compile and then now what we can do is we can set these individual coins to our own amount like let's say we want this coin to add three we want this coin to add one this coin to add seven so on and so forth nine you know 500 so now let's play so this coin gives us three this one gives us one so we're at four now we're at 11. this one gives us nine so i had 20 now this one should give us 500 yes now we're at 520 coins okay we're doing all that on the client so getting all that to work for multiplayer i would say the next thing we have to do is this door and then this key that we made so what i'm going to do is i'm going to grab the player start here and i'm going to put the player start here just so we can test the key so what happens is the player collects this key and then comes up to this door and opens it so how do we set that up for multiplayer now before we do that really quickly we did a lot in this coin and i do want to go over it one more time just to help you understand so first things first these overlaps run on both the server and the client and that's okay because in some situations you want things to happen on both the server and the client for example play sound at location we want both the server and the client to hear this sound right you want players to hear it so this is fine but adding this coin you saw what happened when we didn't do this on the server when we had both the server and the client adding the coin it was running the event twice it was calling this twice so this coin was getting added twice so instead we made a server only event so that only the server was in charge of adding coins and now it's adding correctly so then we call this update coins event which actually this is now tedious right we don't need to make this a server event anymore because in bpcoin this is now our server event so anything we do so anything we do after this event is all on the server only it's not on the client so this event no longer needs to be run on server we could actually just set this to not replicated and it will still work correctly but i will leave it as server update coins just so it's easier to remember so that is all that we're doing here we're just adding the coins on the server so we come in here we take the number of coins that the player has which by default is zero and we just add however many we're sending in here and we set it up so that this variable can be adjusted right the player can set however many coins to add so we just send that number into the player controller we add it to the current amount and then set that as the new amount then we take that new amount and send it to the ui but we have to run a new event for that because this is all server the server can't like do the ui stuff right anytime you want to update the player ui like you want to update their health bar their coin amount their you know the icon for the power up anything you want to change on the player's ui so we just go to the client and then we just add the coins to the ui that's what this event does that this event just updates this coin text right here and so now we want to do this key thing so let's do the key first and then we'll do the door so this is my key it's this flower i'm going to open it up so again we have this overlap running on the server and the client but we don't want to do this game mode stuff anymore we want to go to the player controller so we're going to make this variable this key variable will now be on the player controller let's go to playercontroller add a variable call it has key make this a boolean and replicated and so let's go to make a custom event here server underscore update key and then add an input and make it a boolean and we'll just say like key and then just drag this here that's it and we can keep it as a custom event you don't have to make it run on server here because in the blueprint the key blueprint the server is going to call this so this will already be running on the server so let's go to the key blueprint here and instead of doing this here delete that we want to get the instigator controller and now we want to make a custom event server update key or server give key to player let's just call it this run on server reliable and now we need to add was this a controller object so we need to add a controller object to this event just say controller and then now from here we can call the server gift key to player plug in the controller and then now we can cast to bp platform controller and we can call this server update key server update key and now set as true so now this so when the player overlaps this item in the world it's gonna run this event this is now this key is being set to true so we come into here and now this boolean is being set set to true from here see so this will be true sets that to true now they also go and update the ui here so we gotta do that on the player controller now right we have to go to the client so all it's doing is setting the opacity the alpha to one so i'm just going to delete this just remember t key just remember t key but i'm just going to actually let's just copy this i'm going to copy this and in the platform controller let's just paste this for now so now i can delete this and then we can plug this in and now our key blueprint is done so we're done here but let's go do stuff here now so now we need to update the ui specifically what we're doing is i think we're making this blue this is like the key so when we overlap the key and pick it up this just becomes like that it's gonna be that color so in the platform controller now we need to make just like what we did here we made a client event we make a custom event client update key ui running client reliable and we need to take this hud reference just copy it and then do that and plug that in okay that's all and here we just call it okay that's it okay so i'm just gonna run over here walk over the key and in the lower left corner it should be alpha one yes it is place a sound and everything and now we have a key for the door but the door is not gonna work so we need to fix the door now you can see how the door we're getting an error from the door so let's go fix the door so i click on the door it open it up this is our final task of the video you can see it's the biggest so essentially what's going to happen is the player is going to overlap with this box right here right where is it right come on right here this this box when the player steps in this box this event fires so this is running on both the server and the client but we really only want the server to check a lot of this stuff here really so i'm actually going to disconnect this and we're going to kind of redo it and we're going to do that switch has authority so i only want the server to run this stuff so number one let's have the server check if it's open or not we don't want the player to really check we will have the server be in charge of that oh you know what before i forget let's go back to the key go to defaults and set it to replicates i almost forgot we want to do that so that the key will actually disappear when the player overlaps it so don't forget to do that and then in the door same thing make it replicates and then also let's replicate movement just in case because we're going to open the door so we want to replicate movement i think so now we have the server checking if the door is open and then now we want the server to check if the player has the key so we just do get instigator controller cast to bp platformer controller we want to plug this in here and then we want to do this have key so i'm going to drag off type in key get has key then we want to do this stuff here so i'm going to move this up here and plug this one in instead and then that so we want to check if the player has the key this we can do so now this gets kind of interesting here so instead of player controller i think we want to enable input like this but we might have to change this around because we're doing multiplayer but let's see let's disconnect that and then now we have all this ui stuff so yeah this is going to be kind of ugly but let's just enable input here and we want to draw on the screen so the player doesn't have the key if you play here we'll just run this as the host i'll show you what happens so when the player approaches the door it says key needed you can see on the bottom there but now if we do this as the client it's not going to say that so we walk over we come in it's not going to say anything and then it's going to give us a bug and say error access none and that's because this is a widget this is a like ui element and as i've been saying the servers cannot run ui elements on the client the client needs to do it so what's happening is the server is trying to do all this ui stuff and then it's not working because we're playing as a client so all this stuff we need to do on the player controller so we're just going to redo this in the player controller and it's going to be kind of annoying but we're going to come into our platformer controller we're going to do a custom event this is going to be a client only event show i guess door ui or door message or something whatever make this run on owning client reliable and then we want to add a boolean here we're going to say show message or something like that and you know what you could actually make this like a general show message let's watch we'll do show message ui this could be like a general event where you just want to show a message to the player and it can be a number of things like it doesn't it could just be a number of different things that you do through here you could have several different types of blueprints run this and so we'll do a branch node like this and now what we'll do back in the door is off of this player controller we'll call that client show message ui now off of this false here so let's just go like this we want to say it's true we do want to show the message and then down here there's the end overlap so this is the event that gets called when the player leaves we can do this thing here let me also do an authority here just to keep it consistent so we can do this let me delete this stuff here because we're not using anymore connect this up enable input or disable input rather and then we can do this message again and then when the player leaves we want this to be a false so when it's true we want to do this stuff when it's false we don't but again we want to do this all on the player controller so i'm just going to copy this here these two things i'm going to copy and so when the message is true we want to create the widget attitude viewport and we do want to make it a variable promote the variable call it we'll say message ui and then now plug the message ui into add to viewport and then we can say when the player leaves the overlap event when or when this end overlap runs we'll have it remove the message which is removed from parent here so i'm going to copy this we'll do get message ui you want to remove from parent and that's really it you can come out here and set this like this to clear it but that's kind of redundant you can see they do that here you don't really need to do that but now when i play walk into the box it says key needed i step out and it goes away so we know that's working now so now all that we have to do is i pick up the key we have to make it so the door now opens when the player presses e so again we have a bug there but that's fine so whatever you can just ignore that it's not a big deal but let's now come into here so we have this stuff working here the overlaps are all working and now down here is the door stuff so let's see if the input works for clients i'm just going to test i'm not sure if it does when the client presses e we want to see hello if it doesn't show up then that means that we're gonna have to do it differently for multiplayer press e yeah see so it doesn't show up so that means this whole thing here needs to change so all this enable input and stuff this doesn't matter i'm going to delete that i'll delete that none of that matters we have to do a completely different way of coding it here so now instead of this interact stuff here what we're going to do is do custom event we'll call this open door let's plug that in but we're not going to be doing this here instead we're going to be doing this stuff here we want to check if the player controller has the key so paste this here i'm going to delete this stuff here you want to check if the player has the key if the player does open and then update the ui okay we'll do that in a little bit but let's get the door actually let's actually get this event to work okay so let's come to the player controller so what's going to happen is the player is going to enter into that this box here it's going to overlap with the door i guess we can just do that in here we can make a boolean that's going to allow the player to open the door but just come down here type in interact you get this action event so we're going to do this on the player controller and we're going to need a couple of variables so i'm actually going to rename this message ui and we're going to rename this back to client door so we're actually going to do a couple of things here we're actually going to do another event so do a custom event server comma server underscore door run on server and let's add a boolean as well and then we want to add a bp underscore door locked i think this is a activity n4 let's see we got to fix this error first in the door or it won't open okay just do this for now just so it compiles okay so now it's in the world so this object is called bp door locked lesson 4n okay that's what we want to add here okay make sure this object here is the bp door locked activity n4 this one and then say door ref or door reference promote this to a variable door ref make it replicated and now back in the door locked activity end up here we want to call the door so go server door we don't want to do this one here we want to do message and then right click type in git self and we're going to send a reference of the door through here that's what self means we're just sending the door into the player so the player can have a reference of it and then i'm just gonna duplicate this delete turn off the show message and you can keep this blank but this needs to be plugged in so when the player enters into the box we're sending a reference of the door to the player and then when the player leaves the box we're clearing the reference so now we want to do a branch node like this i'm actually going to do this here we'll do the branch node first so if message is true we want to set the door reference to true if it's false we want to clear it and then we want to call client show message ui go like this and then plug that in okay kind of confusing but you know this is multiplayer so the player walks up he needed okay so now the message and everything's working so when the player approaches the door right here the player now has a reference to the door but the minute the player leaves the box or the second rather the reference is now gone so we're going to use this reference to use this interact key so when this reference is valid meaning that it's set here the interac the interact key will work but when it's invalid it won't work so the way we do that is we can bring out the door reference we can right click it and convert to a validated get and now when the player presses the e key we'll only continue if this is valid so what we want to do is we actually want to cast to the door reference here we might be able to go straight down here and call open door i'm not sure we'll test this like we could just go open door we'll see i'm not sure i'll leave this down here just in case but this is what we're calling anyway so we call this yeah it says that's redundant so we can't just go straight here okay so compile that so now the door will open it's going to do this and then we want to clear the key so instead of doing this here we want to call the update key and we got to do more here as well okay so let's come back here okay so drag off here go update key server update key now we can delete this stuff here we want to say that the player no longer has the key right we leave it as false so now the player doesn't have a key anymore and then we want to update the client okay so we got to do kind of what we did here with the message so let's do a boolean has a key a branch node and we want to say that yes if the player has the key make it fully drawn but the player no longer has the key plug that in there then set the alpha back to 0.3 okay so now here we can just plug that in like that so if it's true the player has a key update the alpha to 1 remove the key it's now false goes down here put the alpha back to 0.3 that's what that does and then we can delete this here delete that sequence now this stuff here i think we want to do on a multicast oh but before that this open door needs to run on the server so make this run on server and reliable so now the player presses the e key and open door is now a server event so this is all running on the server updating the key on the server good but we don't want to play the sound on the server we want to play the sound on both the client and the server right we want to play it everywhere so what we do is we disconnect i will put open door here because we want the server to set the door as open that's fine delete that but now this stuff here this is the visual of the door opening it's a timeline it just updates the doors location so we want to do this on a multicast so the clients and everyone can see it so make a custom event go multi or m underscore and then i will do let's just do like door timeline i guess i don't know and then up here go multicast and then do reliable so now we want to play the sound that'll make the sound play everywhere i actually want to play sound at location though if like let's say a player is across the map we don't want him to play the sound as well so just do play sound that location i'm going to browse to the sound here plug it in and then for the location get actor location it's just going to play the sound at the location of the door and then play from start i think we're done here with the door let's test it as oh yeah and then off of here make sure you call this door timeline and i'm going to put this in the same line so you so we know that's like this is all happening at the same time okay so i'm just going to go over grab the key i'm going to run back and press e okay it doesn't open so let's go debug it so the way to debug now is i'm just gonna do a print string at the end here so the player presses the e key if this says hello then something's wrong with our multicast so i press e so the hello never plays so the code never gets to this point so let's back up a little bit let's come to the beginning let's see if this open door event ever gets called so i'll do a print string here okay so let's press e okay so hello never gets called so we never even get to this point at all so we gotta keep backtracking which means we gotta go to the player controller so so what this is telling me what i think might be happening is that our door reference is never actually getting set correctly not sure why but let's just see i'm going to do a print string off here we can say door is not valid so right off the bat when i just press e it just says not valid and that's that's what we want we only want it to be valid when we're in the box here right so even though i'm in the box it still says it's not valid oh when i see the issue it's right here with this false so this message is okay so we're actually just going to go make a quick change here in the platform controller we'll just call the show message ui so up here well off of false let's just do client show message ui so delete this stuff here just move that up there so on false we want to say yes show message and then on the end overlap here we also want to [Music] stop showing the message so now to make sure it works just going to test as a client really quickly okay key needed okay so it works it shows up and it goes away so we want to do that for sure but then on true if the player does have the key we do want to set this door reference we don't want to do this message anymore though you can change this message to be like like like state or something like the player is overlapping so if it's true set the reference we can delete that but yeah if it's true set the reference if it's false don't set it let me move this back over here now so now if it's true set the reference player has a key set the reference to true and then down here on the overlap let's set the state to false like this so even if the player has the key we want to clear the reference anyway when the player stops overlapping i want to plug that in there okay so now i'm just testing as the host here player presses e nothing happens nothing happened but i didn't get this warning here so i think we made it to here now so now i'm going to do a print string at the end again but the hello never got played at the end so we're still not getting to this point here so i'm gonna test again and see if we're at least getting to open door if we're at least getting that event to fire then we're almost there okay so it's saying hello so it knows we have a key so the error the bug is happening sometime after this so i'm actually going to move the key right here while i test this so this is multiplayer just got to keep testing everything one at a time we know we're getting here so i'm going to put a print string right here now maybe this do once is breaking i don't know but let's just go c yeah so we didn't even get to this point so what i'm going to do is i'm going to put a break point here so do that with f9 and we'll be able to walk through this function here and see exactly where we're kind of breaking okay so we get to here we go step over so this is failing because i'm an idiot so i see exactly what's going on here i forgot to hook up the controller here so actually we don't have to do any of this i just go like this plug that in here and then i plug this in here okay so i'll explain what i did wrong um basically i was trying to cast from that instigator controller which doesn't didn't make any sense because it only works when it's coming from the overlap event so we could have like set it as a variable and then done that but the easier way is just to plug in the platformer controller here and then back in our controller when we call this event i'm gonna put in the player controller here so it's easier to understand but when we call this event we just plug in our player controller here right so now our player controller goes into the open door event here and then we have a reference to it here we can do all this so that was just a silly mistake on my part but it's easy to make mistakes when we're doing all this multiplayer programming so now let's see if the door will open and finally it opens yay hallelujah okay i was testing there as the server but let's test as the client i want to see if the door will update as the client now because that's most important so the client presses e and it doesn't update see how it's not working with the client now so now we got to see what's happening with the client so again i'm going to do an f9 right here a break point so we know it works on the server but now let's got to do the client testing now so we get over here press e so the client never gets to this point i'm going to do a print string here i want to see if it's even getting to this point so it's definitely getting here but something's breaking between this door event in here so this door event actually is it's firing but nothing's happening after we fire it it might mean that we need to tell the server to run the event so just to test this i'm going to do open door make this a server event and then we have the server do this stuff here like that because the server is setting the door reference so i think we need to have the server call this event so i can delete that and then now we call server open door so let's just put this in the line so you can kind of see it so this might be the way to do it let's see pick it up open please yay it works okay so let's now test with two so just have this player stand here and watch and now this player comes over picks up the key disappears comes up to the door presses e and both players see the door open and then this guy he can now come in and hang out with this friend he's like yeah we did it sweet okay cool so this message ui just another it's actually just a minor issue it's really quickly what's supposed to happen is the message ui gets removed when the player walks out so the player's in and then walks out even on the client it's working but at some point it stops working and it only stops working once so really quickly we can just set this to a validated get like this and we'll only have it run this stuff if it's valid so that will clear that warning that we're getting that error but the rest of this stuff works and so now this project is like 90 percent ready for multiplayer we couldn't mess with this end goal here okay so the last part here this end goal will really quickly get this one to work as well so again we have this overlap player overlaps instead of pausing the game we want to just disable the player that reaches the end goal again this overlap runs on both the server and the client so let's go to our player controller custom event server [Music] win game or something like that let's first make this run on the server and now back into the end goal we don't want to pause the game but what we want to do is disable movement so i can do something like well i don't want to disable input but we'll see we'll just do disable input we'll do a get self just plug this in and i might need to run this on the client not sure but we'll see so instead of pausing we don't want to pause then we want to do this widget so i'm going to copy this actually let's copy all this stuff here so copy all this go back to the player controller paste and maybe this is actually all client let's see run on only owning client let's just do all this here but instead of the game mode here we don't need to do any of that we can just bring out our hud reference remove it and then we'll just do client win game and then i can move all of this out of the way get instigator controller cast to our platformer controller and then we can win game okay so the client comes in comes up here wins game you can still move around though and it keeps doing this over and over again okay so we'll do a different way we're not going to do disable input and what we want to do is tell the player that can't move anymore so the best way to do that is up here in our epic character we can set is hanging to true i guess just so the player stops moving so let's do that let's come here and then do get controlled pawn cast to epic character set is hanging to true no we don't want to do is hanging okay we'll just do a different variable here do a new variable can move and then so up here in your movement pretty simple here just bring out can move and the player can only move if this is true so now in the player controller set can move to false we might get an issue here with the multiplayer but let's just try this first oh and by default make sure can move is true or you won't be able to move okay so let's grab the flower press e walk into the end goal and now i can't move i can still look around but i just can't move and that's fine now let's just test this with two players so this player here he's gonna grab the key go in he's gonna go in and reach the end goal yay he wins but see that doesn't affect the other player so the other players can still play around they can come in he can also come in here kind of like look at him he's like yo what's up then he can also finish so now they're both finished and then you can continue this right you could say like you could get a number of all the players in the game and then say when all the players have finished you know load the next game you could also make it so when a player finishes like they're invulnerable and can't take damage or anything like that so there's a lot more we could add on to this but that's going to do it for this video now we've converted the project most of it at least to nine like ninety percent of the project to multiplayer and hopefully this was a good introduction to multiplayer in blueprints um it's not easy like you definitely wanna have experience in blueprint before you start doing this stuff but i think the easiest way to introduce multiplayer is through a beginner's project like this one and just showing how you would convert a lot of these actors and the functionality to multiplayer so yeah guys so that's going to do for the video thanks for watching and let me know what you guys want to see in the next video and we'll see if we can just extend this and continue it and keep building out cool stuff so thanks for watching and i will catch you next time
Info
Channel: Unreal Engine Tutorials
Views: 121,809
Rating: undefined out of 5
Keywords: unreal engine 4 beginner multiplayer tutorial, ue4 multiplayer tutorial blueprints, unreal engine blueprint multiplayer tutorial, beginners multiplayer tutorial ue4, beginners multiplayer tutorial unreal engine 4, beginners multiplayer tutorial blueprint, Unreal engine multiplayer tutorial, Ue4 multiplayer tutorial, Ue4 multiplayer game tutorial, Unreal engine 4 multiplayer game tutorial
Id: 1hzcLMnZ3eI
Channel Id: undefined
Length: 89min 56sec (5396 seconds)
Published: Wed Dec 23 2020
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.