0:09 [Music]
0:11 before we start this video a large thank
0:16 you to Keith Max Aaron Scott tenacian a
0:17 name I unfortunately cannot pronounce
0:19 thank you for supporting my friend and
0:21 Cody for their support on patreon I hope
0:23 you guys enjoy the video hello everybody
0:25 I just want to say this before we start
0:26 if you are an absolute beginner this
0:28 series is probably not the series for
0:30 you you are more than welcome to follow
0:31 along but just know I'm not going to go
0:34 over basic things like variable types
0:37 what a void is what a co-routine is you
0:39 are expected to be an intermediate or at
0:40 least have a basic understanding of the
0:42 variable types and functionality within
0:44 Unity with that being said you can
0:45 follow along you just might struggle you
0:47 have to stop a lot and look up some
0:48 things as we're typing I would also like
0:50 to State my goal for the series which of
0:52 course is to help you become more
0:53 knowledgeable in unity and with netcode
0:56 like yourself I am learning things all
0:57 the time too so if you do things
0:58 differently than me that's awesome I
1:00 would love to hear how you do it with
1:02 that being said let's begin hello
1:10 2021.3.1.of1 if you want to use the same
1:13 bill that is fine I'm using a urp empty
1:15 template and I'm going to begin by
1:16 adjusting my project window because it
1:19 is brand new I'm going to add a tab for
1:21 the project I'm going to drag it here to
1:22 the right I'm going to lock both these
1:24 tabs so that if I click one it doesn't
1:25 influence the other
1:28 I'm going to drag my console just up so
1:30 I can always see it so errors are always
1:32 displayed and warning messages and we
1:34 are good to go so
1:36 I'm just going to adjust the sizings
1:37 here and this will be the window I'm
1:40 using for the remainder of the series
1:43 now let's go and begin by going to the
1:45 package manager and we're going to
1:47 search for netcode but if you typed in
1:48 right away You're Gonna notice you're
1:50 probably not going to get anything and
1:51 that is because we're not looking in the
1:53 right place so click on packages in
1:55 project and change that to Unity
1:58 registry now if you go to the search box
2:00 in the top right again and type in
2:03 netcode you will see netcode for game
2:06 objects at the time this video is
2:09 1.0.2 so I'm just going to click install
2:11 and I'm going to give that a moment to
2:13 install that may take a minute but it
2:14 shouldn't take too long honestly the
2:16 next thing we're going to grab is a tool
2:19 called Peril sync you don't need it but
2:21 I strongly recommend it it allows you to
2:23 clone your project so we're going to go
2:25 and add a package from a git URL I will
2:26 paste the URL in the description of this
2:28 video and just click add if you're
2:30 unfamiliar with using git there's plenty
2:32 of tutorials and resources online it's
2:33 pretty straightforward again you don't
2:34 need this but it makes your life
2:37 infinitely easier you can just
2:38 essentially open your project twice
2:40 instead of doing a build every single
2:42 time to test mode players so for a
2:44 series like this it's it's just a staple
2:47 honestly now if you have that installed
2:48 like me you're going to see Peril sync
2:50 at the top of your project here you can
2:52 basically open a window called the
2:54 Clones manager and we're not going to
2:55 worry about that right now but we have
2:57 it there and we are going to use it in
3:00 this video so for now let's create an
3:01 empty game object we're going to call
3:03 this game object the network manager and
3:05 we're going to use a script from netcode
3:07 for game objects called the network
3:10 manager just think of this like the
3:11 thing that takes in all the information
3:13 for the network between you and other
3:15 players okay that's all you need to know
3:17 right now about it so the only thing you
3:18 need to change on this is the transport
3:20 we're going to use the unity transport
3:21 in the future we're going to use a thing
3:24 called face punch for steam but that is
3:25 a while away and you're going to see
3:27 there's a few options here there's start
3:29 host start server and start clients will
3:31 a host acts as a server and a client
3:34 meaning a player and the server itself a
3:35 server will be something if you had
3:36 something like in the cloud that just
3:38 processes the information and a client
3:39 is just a game client that connects to a
3:42 server so it's let's make a new folder
3:44 and call this art and let's make another
3:46 new folder inside this and call this
3:48 models and I'm going to drag in I will
3:50 link this in the description uh my old
3:52 friends my low poly man that I use for
3:55 all of my prototyping and testing so
3:57 again this will be in the description if
3:58 you don't have a model but if you have
4:00 your own player model use that I'm going
4:02 to drag it into the scene here now and
4:04 I'm going to drag it back into a folder
4:06 but first let's make a folder for our
4:08 prefabs so I'm going to create a new
4:10 folder called data and then a folder
4:14 inside of that called prefabs so I want
4:16 to keep organization very important
4:18 right from the beginning so let's open
4:21 or rather drag in our player I'm going
4:23 to rename them first a player and drag
4:25 them into the prefabs holder and now we
4:27 have a prefab of our player and if we
4:28 edit the prefab in the project the
4:30 prefab gets edited anywhere it is in the
4:33 scene so in a network manager let's drag
4:35 in the player prefab into the player
4:37 prefab variable and this just basically
4:39 creates or uses this prefab for any
4:42 player that joins a game so let's add a
4:43 component to the player here and let's
4:46 add a component called Network object
4:47 you're going to be adding this to
4:49 basically every character in your
4:52 project that is going to have some
4:54 network data attract so all players and
4:56 probably all of your AI I'm then going
4:58 to right click and create an image it's
5:00 going to Auto create a canvas for me and
5:01 I'm going to use this as the title
5:03 screen so let's quickly make a simple
5:05 title screen menu I'm going to uncheck
5:07 raycast Target on your image that's
5:08 important because if you make images
5:10 that aren't being tracked by Mouse
5:13 clicks for UI buttons for example you
5:14 don't need to have that tick to just
5:16 wastes memory so untick that I'm then
5:18 going to choose uh scale with screen
5:21 size on my canvas scalar object I'm
5:24 going to say 1920 by 1080. so that's
5:26 going to change the size of my canvas
5:28 you see it's quite big go to your image
5:30 click on this button up here hold alt
5:32 and click the bottom right Little X here
5:33 or the Blue Cross rather and that will
5:35 expand it and stretch the image to the
5:37 size of your canvas which again is 1920
5:40 by 1080. all right that looks pretty
5:42 good I'm going to rename a couple things
5:44 here now so I'm going to rename image to
5:47 title screen background
5:49 and if we go into the Elden ring menu
5:51 here you can see we have this press
5:53 start button or press any button rather
5:55 so when we click this some things happen
5:56 so let's just press it and see you can
5:58 see here it's checking your saved data
5:59 and then it checks for our network
6:01 connection and it essentially starts our
6:03 Network so we're gonna do the exact same
6:05 thing here now in our Unity project
6:06 we're going to start our Network after
6:08 we press this button first we got to
6:11 make this button obviously so let's I'm
6:13 going to rename my canvas to uh title
6:17 screen canvas and I'm going to go over
6:18 here now under the title screen
6:21 background create a new UI image I'm
6:23 going to call this Banner
6:25 and you can just make this text if you
6:26 want it's just the banner of the game
6:27 like on Elden ring this is Elden ring
6:29 and giant letters I'm going to make this
6:31 whatever size I feel is necessary but
6:33 this isn't too important obviously this
6:35 is a stylistic preference again if
6:37 you're if you're using an image like me
6:39 you want to untick raycast Target
6:40 because you don't need to click this
6:42 image so it doesn't need to be tracked
6:44 as a raycast Target if you have a lot of
6:46 images in your UI that have that box
6:49 unticked it can add up for performance
6:51 long term so go to the image change it
6:53 to a Sprite 2D and UI change it to a
6:55 single and click Alpha is transparency
6:56 if you just drag in some text like me
6:58 from Photoshop again you can just use
7:00 text in unity this is just a style
7:02 choice and it's not important in the
7:04 slightest so now that I have that up
7:06 there tutorial series Elden ring in
7:09 unity I'm going to click this Anchor
7:12 Point on the top and that means if my
7:14 canvas scales at all this image should
7:16 stay towards the top of the screen then
7:20 I'm going to go into the UI or the
7:21 background rather and I'm going to
7:24 create a button okay so so this button
7:26 is going to be our start to gain button
7:28 or rather press start as I'm going to
7:29 call it
7:31 I'm just going to call that press start
7:33 button I'm going to drag that down and
7:35 if you want to you can anchor it to the
7:37 bottom of the screen because it's kind
7:38 of near the bottom so click this icon
7:41 and then hit this bottom anchor icon and
7:42 I'm going to change a few things about
7:45 it so the text I want this to say press
7:47 start or if you want you can say press
7:48 any button whatever you're going to set
7:50 it up like I'm going to change the text
7:53 to White and then I am going to change
7:54 the button a little bit so the normal
7:55 color is the color of the button defaulty
7:57 defaulty
7:59 and then we have the selected color
8:00 which is what we want that is the color
8:02 of the button that it turns to when it
8:04 is selected so the button is going to
8:05 Auto Select when we start the game we're
8:07 going to set that up so that's all
8:09 you're going to see basically in the
8:11 future we can animate it and have it
8:12 pulse but that's not important right now
8:14 let's not get lost in the Polish so I'm
8:16 going to go to the normal button color
8:18 and change it to something a bit darker
8:19 you'll never see this so it doesn't
8:21 really matter to be honest anyway but I
8:23 am going to set it up in case we do
8:26 somehow and I'm then going to after I'm
8:27 happy with that I'm going to basically
8:30 go down to the selected color and change
8:31 it to I'm just going to use a red to
8:33 indicate that it is indeed highlighted
8:36 okay now I have no text as you can see
8:38 it's not appearing for me so this is
8:39 because you're probably gonna get this
8:41 window called text mesh Pro importer
8:43 just click import text mesh Pro
8:45 Essentials this happens the first time
8:47 you set up a text in unity project if
8:49 it's using text mesh Pro and then your
8:50 text should appear like me and you
8:53 should be fine okay so now it just is
8:54 pressed start that's fine that's all I
8:56 need let's zoom out a little so we can
8:59 get our bearings and let's go to the
9:02 title screen canvas and make our first
9:05 script I'm going to call mine title
9:08 screen manager and this is going to
9:09 handle all functionality that is just
9:12 basically fired or used at the title
9:13 screen like starting a new game loading
9:15 your save files we'll keep it all on the
9:18 script to keep it nice and neat I'm
9:19 going to create my namespace SG you
9:21 don't need a namespace I like using one
9:24 mine is that she use whatever you want
9:27 I'm going to make a public void start
9:29 Network as host
9:32 okay so what are we gonna do well we
9:34 need to reference our network manager
9:36 but we can't do that without using the
9:38 netcode library so up here let's just
9:39 say using
9:42 unity.netcode make sure you don't say
9:45 Unity engine.network is not the same so
9:48 we're going to say network manager dot Singleton
9:50 Singleton
9:52 which allows us to reference our network
9:53 manager script in the scene because
9:55 there's only one unique in time and I'm
9:58 going to say dot start host and this
10:00 just starts the network as a host so
10:03 every time we hit the start menu we want
10:05 to start as a host that's our goal so we
10:07 actually call this function now from a
10:09 button which we're going to do I'm going
10:11 to go down to our press start button
10:13 that we've just made and we can actually
10:15 give this button some logic when we
10:17 press it so I'm going to untick raycast
10:18 Target because I'm only using a
10:20 controller but you should keep that
10:21 ticked if you want to be able to use a
10:23 mouse and keyboard so I'm going to come
10:25 down here now on the button and click on
10:27 click add a new event I'm going to drag
10:29 in the same game object that contains
10:31 our new script our title screen manager
10:33 I'm going to go down and click title
10:35 screen manager and then click our new
10:37 function that we just created so start
10:40 game as host alright perfect now we
10:41 click that it will fire this function
10:43 and we are referencing the network
10:44 manager which is the thing we just made
10:46 in our scene I'll go back and show you
10:49 so it's this thing right here
10:52 and then we are starting as a host so it
10:54 just basically presses this button for
10:56 us and runs the logic okay so just a
10:58 quick overview again so again the host
11:00 is kind of like the server and a client
11:02 at the same time it is both a player and
11:04 the server Authority a client is just a
11:06 game client connecting to another host
11:08 or a server I'm sure a lot of you know
11:09 plenty about that right now but if
11:10 you're just starting with the net code
11:12 don't worry about it you'll learn more
11:14 as we go so you should have an event
11:16 system game object now in your scene
11:17 that should have popped in after you
11:20 made your canvas let's drag in our press
11:22 start button in the first selected
11:24 variable this makes us when you start
11:26 your game and automatically selects the
11:27 press start button which is good if
11:29 you're using a controller next let's go
11:31 to our title screen canvas and duplicate
11:33 our press start button let's disable the
11:36 original and let's rename this duplicate
11:38 to something like new game or start new
11:40 game so we're going to use this button
11:42 basically to start a game and put our
11:43 player into the world
11:46 so let's go down now into the text and
11:48 change that to new game or again
11:50 whatever you want to call it as long as
11:51 it's clear this is going to start us a
11:54 new game and I am going to go over now
11:56 to the original that we disabled and add
11:58 a new on click event what is that event
12:01 well we want to First disable this
12:03 button so we can't click it again so
12:04 let's say gameobject.setactive and
12:07 untick the box now we could drag in this
12:09 new button and enable it but in the
12:10 future we're going to have a menu of
12:13 buttons like load game new game etc etc
12:14 so let's create an empty game object
12:17 under title screen background and I'm
12:18 just going to call this title screen
12:20 main menu
12:21 and then after I'm done that I'm going
12:23 to click on this icon and hold alt and
12:25 click this against Blue T So expand it
12:27 the size of my canvas I'm going to drag
12:29 in my new game button so it is a child
12:31 of this game object now instead of
12:33 enabling my new game button I'm going to
12:35 enable this game object which will show
12:37 everything that is also a child of it if
12:39 it is enabled tick the Box Fort is
12:41 enabled then add one more on click event
12:43 drag in your button go to button dot
12:45 select again that is a new game button
12:46 so when you press the start game button
12:48 it will automatically select the new
12:50 game button for you disable your main
12:51 menu and re-enable your press start
12:54 button and then press play now press the
12:55 start button you should see your network
12:57 does start and your player prefab that
12:59 you dragged in earlier spawns into the
13:01 scene and note if you have steam open
13:03 like me steam makes your controller
13:05 inputs act kind of weird in unity I just
13:06 press the A input and it pressed it
13:08 twice for me so close steam if you have
13:09 it open more on that later
13:13 so I'm going to save as as in save the
13:16 scene I'm going to call this scene scene
13:18 underscore main underscore menu
13:20 underscore 01.
13:22 after I have saved the scene I'm going
13:24 to delete the sample scene which is a
13:26 scene that you just start with with this
13:29 project and then I am going to create a
13:31 new scene for our world so basically I'm
13:32 going to separate this project into two
13:35 scenes the menu scene and the world
13:37 scene which will have our whole entire
13:39 world inside of it it's what we changed
13:41 to when we start our game so I'm going
13:44 to call the world scene scene underscore
13:46 World underscore 01. now if I open that
13:47 there's nothing here obviously because
13:49 we just made it we also have to add it
13:51 to our scene's build index so if I go to file
13:52 file
13:54 and then you go to build you'll see here
13:56 there is only the CM use tab which is
13:57 the sample scene which is now gone so
13:59 let's add our main menu first open that
14:01 up and then go to build settings and
14:03 click add open scenes you can delete the
14:04 old one make sure you add the main menu
14:06 first so it's your first scene then go
14:07 to your world scene go to build settings
14:09 again and add open scenes now you'll see
14:12 there is scene 0 and scene one which is
14:14 our main menu and our world respectively
14:16 okay so let's go to the network manager
14:18 now and I'm going to change that to
14:19 World network manager I'm just a
14:21 stickler for names and I'm going to drag
14:23 that to the bottom of the hierarchy here
14:25 I'm going to make a new game object I'm
14:27 going to call this world save game
14:30 manager and I'm going to add a script to
14:32 this I'm going to call it World save
14:34 game manager this is going to handle
14:36 loading into the world loading save
14:38 files starting a new game all that good
14:40 stuff okay so I'm going to delete the
14:41 start and update function I'm going to
14:44 make my namespace which is SG for
14:47 Sebastian Graves and then we're going to
14:49 begin to write some logic in here but
14:54 first let's say using Unity engine Dot
14:56 scene management this allows us to use
14:57 some functionality related scenes like
15:01 loading a new scene okay so let's make a
15:04 public static World save game manager
15:05 variable I'm going to call mine instance
15:07 this is going to be a Singleton so if
15:09 you want you can call it a Singleton
15:11 instead I just like using the keyword
15:12 instance I don't know why it's
15:14 preference that's all so basically this
15:15 allows the script to be accessed from
15:17 anywhere in the project at any time and
15:19 there's only one in the project at any
15:21 given time now you might want to use a
15:22 getter and Setter so you can't
15:23 accidentally override that but I'm not
15:25 going to do that I'm working alone so
15:27 I'm just going to keep it as a variable
15:29 on awake we want to check to see if this
15:31 variable has been filled so if instance
15:34 is equal to null then instance is equal
15:36 to this if instance is not null for some
15:38 reason it means there's two of these in
15:39 the scene at one time there should never
15:40 be so we're just going to say destroy
15:43 game object okay
15:45 and let's just make a comment here there
15:48 can only be one of these World save game
15:51 managers in the scene at one time so one
15:54 script we want to access this one and if
15:57 one happens to exist already this is a
15:59 mistake destroy the game object and thus
16:02 destroying the script so next let's make
16:04 a start function and let's say don't
16:06 destroy unload and we're going to use
16:07 this game object meaning this stays with
16:09 us through every scene that we load into
16:12 the world or the main menu
16:16 all right so next let's make a public
16:19 eye enumerator which is just a
16:21 co-routine basically and we're going to
16:24 call this load new game
16:26 and then we're going to load the scene
16:28 asynchronistically so in the future we
16:30 can use a loading screen and it can keep
16:31 track of the progress so I'm going to
16:34 make an async operation variable I'm
16:35 going to call it load operation I'm
16:38 going to equal it to scene manager dot
16:40 load scene asynchronistically you're
16:41 going to see that's going to require a
16:43 build index number that just means the
16:44 scene number okay so we can make a
16:46 variable for this so it changes we can
16:48 just change it in the inspector I'm
16:49 going to make a serializable field so it
16:51 is visible the inspector you can make a
16:53 variable of type int I'm going to call
16:55 this world scene index which means the
16:56 index number of our world scene we know
16:58 it's equal to one so I'm going to make
16:59 it one then I'm going to pass the world
17:01 scene index in this function and just to
17:03 show you I minimize the script go to
17:05 file go to build settings you can see
17:08 our world scene is number one so you
17:10 want that number to be equal to that of
17:12 Your World scene now since this is a
17:14 co-routine I'm going to say yields
17:16 return null so it stops giving us an
17:18 error and we need to call this function now
17:19 now
17:22 so let's go over to our world or rather
17:24 our title screen manager and right below
17:27 start Network as host let's make a new
17:29 void public void so we can access it
17:31 from the buttons let's say start new
17:34 game and like our network manager up
17:36 here we can access our world save game
17:38 manager because it is a Singleton so
17:40 let's say World save game manager and
17:41 since we called it instance and not
17:42 Singleton you might have called a
17:44 Singleton I'm going to say dot instance
17:46 and then we need to use the start Co
17:49 routine keyword here bracket and then
17:51 World save
17:54 gamemanager.instance dot load new game
17:57 and then save that okay perfect so let's
18:00 go to our new game button and you know
18:02 we've made that by duplicating our start
18:04 game button so let's get rid of the on
18:06 click event that it already has you can
18:08 see here our press start button is a few
18:10 if we go to our new game button it has
18:12 one we don't want that so let's just
18:14 clear it and make a new on click event
18:16 and like before we're going to drag in
18:18 the game object that contains our title
18:20 screen manager which for me is the title
18:22 screen canvas we're going to find our
18:24 title screen manager and I'm just going
18:27 to look for a start new game now if we
18:29 go and press play
18:31 we can go into the game here and you can
18:33 see pressing start actually spawns our
18:35 character and starts our network but if
18:37 we start the new game here our player
18:39 model does not survive the scene change
18:42 so we need to make it so when our player
18:44 model spawns when the network starts
18:46 he survives the scenes changing so go to
18:49 our player the prefab let's add a
18:51 component to him called the character
18:53 manager now across the series The
18:55 Character manager will just basically be
18:57 the brains of controlling all character
18:59 functionality and any scripts that have
19:02 to do with the character so let's make
19:04 our namespace as is per tradition minus
19:07 SG and then inside here we're not going
19:08 to do anything fancy right now we're
19:10 just going to make an awake method and
19:12 we're going to say don't destroy unload
19:14 and pass this game object this being the
19:16 character save that and we are good to
19:18 go he should now survive the scene
19:20 change so let's create a new empty game
19:21 object I'm just going to call this
19:23 player UI manager in the future this
19:25 will house all of our UI logic and will
19:27 be the hub for interacting between our
19:30 UI parts now I'm going to reset the
19:32 transform and add a new script or create
19:33 a new script rather I'm going to call
19:35 player UI manager I'm going to create
19:38 and open that up I'm then going to
19:39 delete the start and update
19:41 functionality I'm going to add my
19:43 namespace as is pro tradition minus SG
19:45 yours is whatever you you want it to be
19:47 and let's write some very simple logic
19:49 that allows us to test our Network so
19:50 we're going to delete this in the future
19:51 this is just for debugging but we're
19:52 going to keep it for a long time because
19:54 this allows us to quickly test I'm going
19:56 to make a header call it Network join
19:57 I'm going to make a serializable field
19:59 going to call this or make it up type
20:01 bull rather I'm going to call it start
20:04 game as client okay so when we start the
20:06 game uh when we hit the start button in
20:08 the menu it starts it as a host in order
20:09 to join as a client we need to disable
20:12 the network and run it again as a client
20:14 so I'm going to make an update function
20:16 here I'm going to say if start game as
20:17 client we're going to say start game as
20:19 client SQL false so we reset it
20:21 instantly I'm then going to say Network
20:23 and manager so for that I need to say
20:26 using unity.net Code make sure you don't
20:27 accidentally type in unity
20:30 engine.networking it is not the same so
20:32 using unity.netcode then I'm going to
20:34 say Network manager.singleton and we
20:36 want to do is shut down the network so
20:38 we're going to say Network
20:42 manager.singleton dot shutdown that's it
20:44 so I'm going to make a comment here so
20:46 it's very clear we're going to say we
20:49 must first shut down the network as a
20:51 host to start it as a client so because
20:55 we want to connect as a client okay so
20:57 right below that then we can reference
21:00 the network manager Singleton again but
21:01 I'm going to make a comment first be
21:04 super clear so after we shut it down I'm
21:07 going to say we then start the game or
21:09 start the network or restart the network
21:14 as a client so Network manager.singleton
21:16 dot start as client I believe start
21:19 client there we go and let's save that so
21:20 so
21:23 okay like our world save game manager
21:24 and our network manager we're going to
21:26 make this a Singleton because there
21:28 should only ever be one in the scene at
21:31 any given time so let's make a public
21:33 static player UI manager I'm going to
21:36 call mine instance again you should use
21:37 get and set if you're working with
21:39 teammates or anybody else so you can't
21:40 accidentally override this variable from
21:42 some other script but I'm just going to
21:44 keep mine as an open instance here on
21:46 public and awake I'm going to say if
21:48 instance is equal to null I'm going to
21:50 say instance is equal to this else
21:52 destroy this game object because there
21:55 should only ever be one in the scene at
21:58 any given time okay that looks good guys
21:59 we're almost ready to test this and
22:03 connect with another client so let's go
22:05 over to the prefabs folder I'm gonna
22:06 make a new folder I'm going to call this
22:08 world managers because we're going to
22:09 have a few of these as the series
22:11 progresses I'm going to make prefabs of
22:13 our player UI manager of our world save
22:16 game manager and of our network manager
22:17 in here and save them so if we change
22:19 the prefabs it will change in the scene
22:22 for us make some easier to edit then I'm
22:23 going to go to our clones manager I'm
22:25 going to open up a new clone if you
22:26 don't have this you can just build the
22:28 game and create a build and just run the
22:30 build I mean then say open a new editor
22:32 after I've cloned it successfully and
22:33 I'm going to drag it over the screen so
22:34 you can see it's on my second monitor
22:36 you can see it just is an identical
22:38 project you might have to change the
22:39 aspect ratio and stuff and let the
22:40 Windows settings but other than that it
22:42 is exactly the same now before you mess
22:44 around with it make sure you save your
22:46 scene in the main project so then it
22:47 will just basically carry over the
22:49 changes into this new project you never
22:51 want to edit the other project always
22:53 your main project never the Clone so
22:54 next I'll make a start function on the
22:56 player UI manager I'm going to say don't
22:58 destroy unload so it carries over into
23:00 the new scene and then if I press play
23:02 here and start the game on my main
23:04 monitor I'm going to start the game go
23:05 to new game you can see yep Iron Man
23:07 here survives the transition there he is
23:10 right there now if I drag the window
23:13 over from my second project and I start
23:15 it we're going to try to connect so I'm
23:16 going to hit play
23:18 and then when I get into the game view
23:19 here I'm just going to press start it's
23:21 going to load us into the new scene
23:23 after hit new game then let's go to our
23:25 player UI manager and click Start game
23:27 as client it's going to give you this
23:28 warning message saying you must stop the
23:30 server first just hit it again it's
23:32 because the server didn't stop when it
23:33 tried to start as a client when we hit
23:35 it you're going to see there are two
23:38 players in both of these scenes we have
23:40 just successfully connected to our host
23:43 from our client player we have
23:45 successfully established a network
23:48 connection between two players alright
23:49 guys that's gonna do it for the first
23:50 episode if you made it this far please
23:52 be sure to drop a like and leave a
23:53 comment it genuinely helps out the
23:56 series so so much as always a very
23:58 special thank you my patreons it's
24:00 because of you guys I get to keep making
24:01 this kind of content and I love making
24:03 this kind of content I'm very excited to
24:04 start the next episode where we're going
24:06 to cover some Locomotion we're going to
24:08 get into inputs and we're going to see
24:09 how much time we got and what we can
24:10 cover but we're going to start building
24:13 our basic controller very very excited
24:15 for that so I will see you guys in the
24:16 next one [Music]
24:33 [Music]
24:36 thank you [Music]
24:45 [Music]