Hello and welcome I’m your code monkey in this video we’re going to learn how to use unity’s Game Server hosting to automatically host dedicated servers for multiplayer games with this you can make a dedicated server build of your game then upload it to the cloud on the NT Dashboard and after that it will create multiple instances of that server build so the players can play this system automatically scales the number of servers up or down depending on demand and also by the way this is a tool that used to be called multiplay so it’s the Same thing they just renamed it to game server hosting and also this tool is already extremely mature and production ready for example this is exactly what Apex Legends uses to manage their server infrastructure so basically if it can’t handle a game on that massive scale then it can certainly handle your games now For this tutorial first I’m going to show you how to use Game Server hosting in general with a given build and then I’m going to show you how I made the dedicated server build for my kitchen chaos multiplayer game the specific change that I had to make to make it Work so it’s also a tutorial on how to use netcode for game objects combined with game server hosting also by the way in case you don’t know this game was fully built from scratch in my two free courses one on making the game in single player and a second one on making it Multiplayer there is one really sneaky thing with regards to how net code for game objects works that took quite a bit of refactoring to make this work and it was also quite a bit tricky to figure out how to make the proper dedicated server build I really couldn’t find any Info on specifically using Game Server hosting combined with netcode for game objects so hopefully this video won’t be very useful to a bunch of people if you find it helpful go ahead and hit the like button you can download the complete project files for this video And expect to see how it all works and beyond that this tool helps you start and sub dedicated servers then Unity has another tool which combines very well with this one which is Matchmaker with that one you can create matches to group players together and then that tool can Talk to game server hosting to spin up a new server instance for those players to play I’m also going to cover how to use Matchmaker in the next video and also this video is sponsored by unity okay so like I said I will first cover how to use Game Server hosting in general Assuming you already have a server build and then I will show you how I made the server build for my game so first thing we do is just like any other Unity gaming Services tool let’s go to the NT dashboard then up top select your project then unlock outside go into Multiplayer and then up here we have game server hosting right away we’ve got a nice set of multiplayer buttons so let’s go ahead and click now this one actually takes some setup so let’s just wait for this complete okay setup is complete so now let’s follow these steps first one is Integrate with your game server and as you can see this tool is multi-platform for example like I mentioned Apex Legends use this young but it is not made with unity so here you have a Unity SDK and real SDK and you can also use it with a custom engine through the API Here we’re going to use Unity so let’s go with that next step is link the project so open up your unity and first of all appear on the top left corner make sure you are signed in if you’re not if instead of seeing your name you See a button saying sign in if so then go ahead close Unity then open up ENT Hub make sure you are signed in there and then open the project if you are signed in then go into edit then into project settings and then over here on the left side under services this is Where you can create ENT project ID so just go ahead select it and create it or if you already made one in the dashboard then let’s go through the other menu using existing Unity ID and just select it so here I’ve select the project and I’m going to link it Okay great so far so good now back in dashboard okay we already did this great and the next step is to install the actual package so this one has to be installed through the name the package does not show up on the Apex Dimension by default so let’s go ahead and make Sure to copy this one to the clipboard and then back in the project let’s go into window into the package manager and up top let’s go into the plus sign and let’s add a package by name and pass in the exact same name make sure you don’t Make a mistake make sure you write everything perfectly and let’s go ahead and add any up there it is the multiplayer package has indeed been installed okay great now with this package in your project this is how you can then create the build like I said I’m going to cover this in more detail in the second part of this video for now let’s keep going assuming you already have a working server build so back in here let’s finish the setup the next one is to create a build so let’s go with that this one requires a build Name you can have different builds with different names or you can also just create one build name and then update the files so here I’m going to name this something like build a then for the operating system let’s go with Linux this is for the server build not the actual player build And for the upload method you can either upload the files directly or you can use a container image so you can pre-prepare a Docker container and just upload that either option works in my case I’m going to use the simpler direct file upload so let’s go on next and even though you can Just drag and drop the files in order to upload them so here I have my funnels I just made a regular Linux build so just go ahead select all the files and drag them and there you go let’s just upload alright so all the files have been Uploaded let’s go ahead click on next and here we create the build with this name we have the first version okay finish so now that we have build we need to create a build configuration which is what defines how the build will run so over here let’s begin by giving it a Name so let’s say build config a and for the Bill Let’s select the build that we just uploaded okay then for the executable in this case the Linux executables have an extension of x8664 so if we just search for 86 yep there you go we do find the final okay that’s It then for the query type this is for getting analytics from your build and the unity package that one uses sqp so let’s go ahead and choose this one and finally down here we have the launch parameters with this you can add whatever Flags you want to your Dedicated server build that can be helpful to make sure that it runs different logic in this case the defaults don’t look great so the port don’t remove any of these let’s just add just Dash no Graphics in order to make sure that our server build does not have any rendering Okay so that’s it with this we have our build configuration so let’s click on next then here are some config variables you can read these from inside the game so if you want to pass in some extra data to the server as it runs you could use this For example if you want to enable some debug mode or give one player’s visibility or something like that but in our case let’s just leave them on the defaults let’s go then here we need to set the usage settings so the CPU speed and the memory now these numbers are Obviously going to vary depending on what kind of game you’re making but after you have the build and the servers are running you can then monitor to see how much it’s using then you can come back here and modify these values you can use defaults or going to custom and just input anything So for starters let’s go with defaults this is more than enough for our simple game okay let’s go ahead and finish and actually as soon as I try to get an error that is because the bill needs to be synchronized so if the 7cu very simple just wait a little bit basically The files that were uploaded they need to be synchronized to The Entity service so let’s just wait a little bit before clicking on finish again and if they’re going outward okay great so we have our build configuration set up the next thing we need is down here To create a fleet basically a fleet is a collection of servers running a certain build on a certain region so let’s go ahead and create a brand new one let’s give it a name like Fleet a then yep we are using Linux and let’s go ahead and Select our build config okay great let’s go next then for the region later on you can also add more regions to a fleet for now since I’m in Europe I’m just going to select Europe okay great then for the minimum and maximum servers like it says here if you put a minimum Above zero if you do that then you will have some cost even if no one is playing the game so if you are trying to limit costs then definitely make sure over here on minimum put zero and for the maximum servers again this is going to Depend on your game but just for testing let’s just go with one that’s more than enough okay let’s go ahead and finish so with that we have a build we have a bond config and a fleet all of that setup now let’s verify that it’s all working by Making a test on location so here let’s go ahead and select the fleet select our region and select the build config let’s go on next and then let’s go ahead and run the text so that is going to request an allocation and now it is waiting for the server And if we can see the server has been allocated we can see the server npn ports so let’s go ahead and finish and if on the side we go into the servers menu up here we do see a list of all the servers so we can inspect this one which Has been allocated we’ve got a bunch of analytics then we can see a bunch of events and then over here we can see a log and Yep this is essentially the unlock the unity generates so right away we can see that it is running with no Graphics and if we scroll down we can see all of the regular logs so in my case I’ve got a bunch of debug down logs in order to see which scene the dedicated server is in so over here we can see that it did allocate some Resources it got a port where it should allocate and then allocated in there and now it is ready to receive the players okay so now here I have my regular game build I go inside multiplier and yep right away I do see two ways of joining A server I can see a server list and it shows me the server ipn port or down here I’ve got two text boxes so I can input the ipn port and join by IP so with either of these if I click on it if there go connecting any of their yo it Connected to the final dedicated server and everything else plays as normal so over here I can set as ready and yep it goes into the main game and now I can play the game as normal all right awesome so everything is working in the game and here in dashboard we can verify that It is working so let’s just refresh the slogs let’s just change page come back here and their Guild log is refreshed so we can see it and if I can see one client did connect it went as ready and loaded the final scene okay great so everything is Working perfectly now one more option that I add over here into the game is the ability to create a server now I’m going to talk about this part a bit more in a little bit but in most cases you probably would not expose this button to the players you don’t want players to Manually be able to create tons of allocations which you then have to pay for so I made it here just for testing I can click on this button and if with that here I have a successful level location and over here yep we can see we do have two servers allocated and on Serverless yep I do see both servers so I can join this brand new one connecting and it’s inside and everything else works as normal okay so everything is working perfectly now let’s see how I made the build work by the way like I mentioned this game that I’m using here Kitchen chaos this is a game that I built entirely in the previous two free courses so if you want to see how all the code is set up and how all of this was built from scratch go watch those here for making the dedicated server build the main thing is you must Automate the process for getting the bill into a state where it is ready to accept players so in the case of this game first it starts off on the main menu then we go into the multiplayer scene and only then we can create a game which then goes into the character’s light Scene and it’s all in here that it’s actually creating the connection so basically for the dedicated server we need to skip all those steps until we get here so how I did then how I handled that dedicated server logic is over here on the script compilation I defined a Defined symbol for a dedicated server then over here in the code I can make some logic specific just the dedicated server so for example I have this correct place on the main menu so it just is an if test for that symbol and if so it just doesn’t log and loads the Lobby scene right away so automatically and then on the lobby scene I’ve got the regular kitchen game Lobby and on this script it does a bunch more dedicated server Logic the important one is right here after initializing DMT services you need to make sure to only call Multiple events after this one so after that here we have an if if so then it first of all listens to some server events and then the important one is actually the multiply allocation so over here you get the server config to see if it has already been allocated if so then It goes and runs this function and then this function down here is pretty simple just grab C data related to This Server specifically the most important one is over here to the port it sets the connection data and then importantly it starts a server note how it start server Not start host so this function really does example the same thing as start host just with a different function call again remember the differences between server host and client so it starts the server and loads the character select scene but actually before it does that over here the important thing for setting the Connection data for this one it goes into the NT transport in order to set it up and for the port that we use is the one that we get here from the multiplayer service this one gives us a bunch of data but in order to set it up With netco for game objects all we really need is just support and also make sure you use the port not the query Port those are two different things and one extremely important thing is over here the enlisted address this one is an optional parameter you can Leave it as no however if you do if you omit this parameter if you do it like this then it will not work the server will not be reachable this actually took me quite a bit of time to figure out if you don’t like this it won’t work you Must make sure to listen and must make sure to listen on this IP so 0.0.0.0 so don’t forget this and over here for the ipv4 I actually don’t think this one is actually necessary I tried this with zero zero zero zero or one two seven zero zero one and either one Worked so it seems like the super important parts is over here the port so you must make sure to use the same one as over here and you must make sure to listen on this IP if you don’t then it will not connect okay so with all that The transport is set up so then you can start the server and then it just loads the character slight scene which in turn runs this script and on this script we’ve got some more dedicated server logic at this point the server is ready to accept for players so that is why we Call this function so this basically tells the motorway service that Yep this server has reached a ready state so it is ready to accept players now since we can set as ready we also need to set as unready basically when we made the game in the free course we decided that the players Should only join during this character selecting after the game starts it should no longer accept players so for that logic I had here on the kitchen game manager which only runs on the game scene and for this one over here on sart once again doing an F on the dedicated server And if so just set the server as ready also one minor thing the log was getting tons of warning messages that were just cluttering the log so to solve that I just set the camera dot main enabled to fonts that disables the camera which sound that error okay so without that That is really all you need with this server gets created it automatically gets to a state ready to accept players and then gets state to get unready then for some other things back here on the lobby script when we are initializing the server yep over here there is a Function call to start server query Handler this is basically the sqp server query protocol that we saw a while ago this basically lets the server talk to multiply directly although I’m still not entirely sure what would be the main purpose for that maybe it’s to make it Work with Matchmaker I’m not sure yet but still you must call this function in order to start the sqp this function then returns an object of this type so an I server query Handler and then based on the documentation you should call a function on the every update so let’s See down here where I have the update here it is so some more dedicated server logic if that one is set really the only thing is I’m setting the current players so if you go over here onto the dashboard and you go inside a server over here for the concurrent users you Won’t see that update if you set that field so you can set this video don’t know this one is optional the one that they really require you to do as it says on documentation is on every update make sure to send an update server check this lets the multiplayer backend know that This server is still alive and active then for something else for connecting to the server there’s this input field and this button that I shown so here is the script and it’s very simple just on click just grab the text from both input Fields just go into DNT Transport set the connection data so the ipv4 and the port and you start the client that’s it super simple the trigger part was actually making the server browser the tricky part is because that feature that ability that one is not over here on the multiplayer service so if you just use the package You can’t actually get the server list over here just got the server config ready and ready and so on you don’t have anything to list any servers instead that part actually exists on the web API in order to use this web API you need to create a service account so back in the Dashboard go into projects then over here go into service accounts and here you can create a brand new service account when you do then you can generate a key and then down here you can give it some permissions the important one for the server browser is the multiply API Viewer after that you can now access this web API from anywhere like for example inside unity and for the endpoint it’s the one the servers the endless servers so this one returns all of these servers although do note that this API call requires Authentication you can see in the services web API docs For how that works and basically you need to send as an authorization header so you grab the key ID the secret key you concatenate both those strings and generate a base64 and use that for the authorization so over here in the code that’s exactly what I’m doing so I’ve Got the key ID I’ve got the key secret then I convert it into a byte array and I use convert to base64 in order to get the key base64. then for the project ID and the environment ID for those you can get them from the dashboard so for the project ID just Click up here onto the project settings and up here is the project ID and for the environment ID go to somewhere like over here the server list and over here we can see the environment so let’s go and manage them and up here we do see The environment ID so when we have all that data then it’s just doing a basic get request and for this I use my web request class that I created in a previous video and since then I also updated it with some more features and To make this work I had to modify it to support also sending custom headers I included this class in the project files for this video basically I just made it take an action which receives a Unity Web request so with this I can set the request header and over here I can set The authorization with that I am authenticating this request and then just call the regular URL then we can see on the web API what exactly it returns so you can see that it returns an array and each object is going to be a different server it’s Going to have the IP the port the status and so on although actually one note which is the Json that this returns is somewhat malformed or at least it doesn’t parse automatically using unity’s built-in Json utility so for this to work I had to manually put it Inside a serverless field here is the type that I’m using so I’ve got a server list and then each server has on this data and for using all that data I just did a basic visual so the same thing that I did so many things during that course pretty much just instantiating a Template setting the button click in order to connect to this IP on this board and for doing that just goes through the entity transport so example the same as previously now one missing piece is how to create new allocations so right now we saw how to do it by Creating a test allocation but like name implies this is just a quick allocation just for testing in final game you want some regular allocations and most case is you’re actually going to be doing that through Matchmaker which I’m going to cover in the next video but you can Also make it manually without Matchmaker however the way you do it is also a little bit tricky for some reason over here on the dashboard there’s no way to create a regular allocation just test on locations but you can do it through yet another web API this one is different From the previous none that I shown sectionally took me a while to figure out since there are two commonly separate ones on this one down here we do have an endpoint in order to queue an allocation request this one does require some authorization in order to create New on location we need to have this permission so over here back in the services account then here you need to add the multiply allocations admin and then for this specific API instead of using basic authentication like the previous one for the server browser for this one you need to use the token Exchange API in order to do a better authorization the way you do it is pretty simple you just send to the Token exchange API you send that the authorization basic and then you get the return value which is going to be the access token and then you use that on The bearer authorization so so that’s exactly the code that I have here I’ve got my key ID my key secret I create a base64 then with that the first thing I do is a post Json and for the Json request body I send in the Scopes that I Want so in this case multiply allocations create and for the endpoint I’m going to go into the token exchange so I’m going to send in the base key 64 and that one is going to return the actual JWT token so with that I can now use authorization Bearer passing that Token and I can access the multiplayer services in order to create a brand new allocation and yep it allocates now honestly for this specific thing I’m not entirely sure what are the best practices here but I’m pretty sure that you shouldn’t give the players the ability to manually allocate servers Themselves so this would probably be in some kind of game back end where only you the developer control you can check how many players are playing the game and if all these servers are full then manually allocate some more so in the final game you would not have a create Server button like I have here the players would only see the server list and the join IP so with that pretty much everything is working except for a very sneaky issue to do with netcode for game objects alongside some regular problems for those regular problems basically the Issue is how the game was made thinking there was always a host that’s how I developed the game in the course one example is over here on the tutorial UI on this one this message does show directly on start but then for hiding it it was only being hidden over here when The local play already changed now obviously that makes sense if you got a host the host is going to set as ready and everyone needs to be ready so this won’t always trigger but on the server if there’s no input then it just never hides the server itself does not have a Local player so if you make it is a server build and over here this will never run so this window will never hide now in this case it’s not necessarily a problem because the server isn’t really going to use any visuals another similar example is over here on the delivery Manager now for this one for adding a recipe first of all over here on the update it runs the spawn recipe timer it counts down and then spawns a recipe so he generates a brand new random recipe index and then for spawning that it does that through a client RPC so it Goes in here and adds it to the waiting recipes on list now when the game made in the course this worked fine since the host works as both a server and a client so the host would still run this logic and the host would still add a waiting Recipe to the list however over here we just have a server meaning the server is not a client so the server is never going to run this client RPC so the issue that we have here is that the server will never spawn recipes will never add them to their own list so the Server won’t just keep spawning recipes forever since this list will never have any elements the solution is to make sure to add the waiting recipient list directly on the server code however we also need to make sure not to add double the recipes in case we are working with A host so the way that I solve that is like this basically I just made a function for adding a recipe done list so this is just a regular function so not a server or client RPC just a regular function then appear when we generate a brand new recipe we’re going To call that function so that the server or the host will run this code and add it to the list and then it’s going to fire a client RPC and importantly over here on this land RPC it is going to test if it is a server if so returns so It is not going to do anything so this way the server is going to add it through this method and the clients are going to add through this method with that all of them will have the same waiting recipe list so that’s one example of a problem that only happens If playing as a server and does not happen if playing as a host another much much more serious problem has to do with several rpcs basically if you have code running on a server meaning not a host just a dedicated server if you have some code like that and you try calling a Server RPC then nothing will happen the server does not run server PCS if they are initiated by the server it won’t run them if the client calls a server IPC but it will not run them if it is initiated by the server now this is something that confused me for quite a Long time I actually thought this was a bug I asked in the forums but apparently it’s normal meaning that in order to fix this one issue required quite a bit of refactoring for example over here on the cutting counter if we go down to where we are cutting so here we have the Interact alternate this is where we are actually cutting the object so here it is a server RPC in order to cut the object this part does have some issues since it just goes through the client RPC so it doesn’t go through the server but still the more important issue is Actually on the second one for testing The Cutting progress so this one is a server RPC so the client is going to run this code because only the client is actually going to cut the object so the client is going to call this function and run the server IPC so then this Function down here this one is actually going to run on the server so that’s fine so far so good however then for destroying and spawning objects these are only going to happen on the server if we follow this function call we go into this one and we have another set of RPC and the issue is that this code over here this one is not going to run so going back to interact alternate this one runs on the client and the client calls this server PC Then This Server RPC runs on the server and then if the Server tries to call this function it is going to run this code which is going to try to call the server RPC but whilst on a server RPC you cannot run a server PC so this code will never execute so nothing will ever happen this is the really sneaky issue which is really Strange if you have any code running on the server and you want to execute that code on the server then you cannot make it a server PC you need to make a regular non-rpc function in order to conclude from the server if we try to call a server IPC from inside a server Then you won’t be very confused because this does not throw an error it doesn’t do anything it simply literally does not run this code so nothing actually happens the solution that I did here is pretty much the same thing so I just made a non-server RPC function just to Actually destroy the object and then on the code to destroy an object if it is a server then I’m going to call the regular non-server RPC function and if it is not the server then I’m going to call it server PC which then won’t run it normally this was really tricky to Figure out nothing was being synchronized even though the code was actually the same it took me a while to figure out the solution which is simply you cannot call several PCS from inside a server so basically I just right clicked on the server and the client Rpcs and I just find all the references and I just went through all of them and make sure that I didn’t have any chain server RPC calls for example here on the plates counter for handling the code to generate a brand new plate here I’m using a server C which then tells all The clients to spawn the plates but again this code is running on the server so this will never run this will never do anything so solution over here is just split it just make a non-server non-rpc function just a regular function to run the regular code then I call this One directly from the server and I call the other client RPC and make sure it doesn’t run twice on the server so I just went through all my list of rpcs made all those fixes and with that change everything else worked perfectly also by the way for testing Since we made over here the dedicated server defined symbol like this it is going to run the dedicated server code and we can just rename this so just with something else just whatever it is as long as it’s different and now it will no longer run the dedicated server code Just make sure to click on apply and that’s it so when I was testing I would make a dedicated server build I make the build and upload it then rename this and run this build over here in the editor with that all of the code for the Dedicated server no longer runs so I can run this as a regular build okay so after all that here is the working demo I can either create a test on location or create a manual allocation and there you go God success everything was allocated if I look in the serverless I Can see a server has indeed been allocated then in my game yep I can see that server over here on the server list so I can click on it to connect to the server and if there you go now other players can connect and then we can all play together in a Nice dedicated server alright awesome now the one missing piece here is how do you automate the server allocation right now it’s spring manual you have to either do it in the dashboard or through the web API it would be good to automate that part when players need a server Well for that second part that is actually handled through Unity Matchmaker which is their matchmaking tool it’s how you can create matchmaking tickets and group players together then when the Matchmaker finds enough players to play a game it allocates a new multiplayer server which you can then Automatically join so that your own DNT matchmaker is what I’m going to cover in detail in the next video for now here you’ll learn how to get started with game server hosting which lets you run dedicated service in the cloud and you also learn how to combine it with Netcode for game objects there isn’t much documentation on this specific combination so if you like this video go ahead and like the video check out the downloadable project files and if you haven’t then go watch my complete free multiplayer course which covers the entire creation of this multiplayer game And how we got to this point alright hope that’s useful check out these videos to learn some more thanks to these awesome patreon supporters for making these videos possible thank you for watching and I’ll see you next time thank you Video Information
This video, titled ‘Run your Servers like a PRO! (Unity Game Server Hosting Multiplayer Tutorial)’, was uploaded by Code Monkey on 2023-03-15 18:00:07. It has garnered 38994 views and 1532 likes. The duration of the video is 00:28:13 or 1693 seconds.
🌍 Learn more about Game Server Hosting https://on.unity.com/3ZW9VZT ❤️ Watch my FREE Multiplayer Course https://www.youtube.com/watch?v=7glCsF9fv3s ✅ Get the Project Files https://unitycodemonkey.com/video.php?v=IvCVFywNXMc 🌍 Get my Complete Courses! ✅ https://unitycodemonkey.com/courses 👍 Learn to make awesome games step-by-step from start to finish. 🎮 Get my Steam Games https://unitycodemonkey.com/gamebundle
🎮 Wishlist my Next Steam game! https://cmonkey.co/totalworldliberation
Sponsored by Unity
🔴 RELATED VIDEOS 🔴 Learn Unity Multiplayer (FREE Complete Course, Netcode for Game Objects Unity Tutorial 2023) https://www.youtube.com/watch?v=7glCsF9fv3s Learn Unity Beginner/Intermediate 2023 (FREE COMPLETE Course – Unity Tutorial) https://www.youtube.com/watch?v=AmGSEH7QcDg Download Data/Images from inside Unity (HTTP WebRequest) https://www.youtube.com/watch?v=Gk0-amfn5DM Easily handle MATCHMAKING in Unity! (Skill based, Platform, Region) https://www.youtube.com/watch?v=90Iw1aNbSYE
💬 Let’s learn how to handle Dedicated Servers with Unity Game Server Hosting (Multiplay) This is their tool where you can upload a server build to the cloud and then the system spawns servers and scales up or down depending on demand. This works very well with Matchmaker which is the tool that I’m going to cover in the next video. It’s a very mature production ready tool, in fact this is exactly what Apex Legends uses to manage their server infrastructure. It is also engine agnostic as you can see since Apex Legends is not made with Unity but does use Game Server Hosting. You can use it Unity, Unreal or any Game Engine. Here let’s learn how to get started with Game Server Hosting and for a Demo I’m going to use my game Kitchen Chaos which was entirely build from scratch in the previous two FREE courses.
📝 Some Links are Affiliate links which means it costs the same to you and I get a nice commission. 🌍 Get Code Monkey on Steam! 👍 Interactive Tutorials, Complete Games and More! ✅ https://store.steampowered.com/app/1294220/
If you have any questions post them in the comments and I’ll do my best to answer them.
🔔 Subscribe for more Unity Tutorials https://www.youtube.com/channel/UCFK6NCbuCIVzA6Yj1G_ZqCg?sub_confirmation=1
See you next time!
📍 Support on Patreon https://www.patreon.com/unitycodemonkey 🎮 Grab the Game Bundle at https://unitycodemonkey.com/gameBundle.php 📝 Get the Code Monkey Utilities at https://unitycodemonkey.com/utils.php
#unitytutorial #unity3d #gamedev
——————————————————————– Hello and Welcome! I’m your Code Monkey and here you will learn everything about Game Development in Unity using C#.
I’ve been developing games for several years with 8 published games on Steam and now I’m sharing my knowledge to help you on your own game development journey.
I do Unity Tutorials on just about every topic, Unity Tutorials for Beginners and Unity Tutorials for Advanced users.
You can see my games at www.endlessloopstudios.com ——————————————————————– – Other great Unity channels: Unity – https://www.youtube.com/user/Unity3D Brackeys – https://www.youtube.com/user/Brackeys Dani – https://www.youtube.com/channel/UCIabPXjvT5BVTxRDPCBBOOQ Jabrils – https://www.youtube.com/channel/UCQALLeQPoZdZC4JNUboVEUg BlackthornProd – https://www.youtube.com/channel/UC9Z1XWw1kmnvOOFsj6Bzy2g Sykoo – https://www.youtube.com/user/SykooTV Jason Weimann – https://www.youtube.com/channel/UCX_b3NNQN5bzExm-22-NVVg Jonas Tyroller – https://www.youtube.com/channel/UC_p_9arduPuxM8DHTGIuSOg ——————————————————————– – Website: https://unitycodemonkey.com/ – Twitter: https://twitter.com/UnityCodeMonkey – Steam: https://store.steampowered.com/developer/EndlessLoopStudios