Create a server for your Unity game using .NET Core
Create a custom server using .NET Core and host it in the cloud to act as your games backend. A custom server specifically designed for your game gives you the greatest freedom to deliver your ideal product.
In this video we learn how to:
Setup a server and class library to share models and logic across our server and game.
I'll give you a rundown on what a server & API is
Communication between server and client
How to run tests using dependency injection
In part two we add authentication & authorization, and we hook it all up to a database.
A custom server you can provide your game with features such as:
Achievements, leaderboards, synced player data, guilds, friends lists, real time chatting, loot boxes, matchmaking, player progress, and much much more.
Full project on my Patreon: / tarodev
This tutorial is information dense... there's a huge amount to get through, so buckle up and get ready to learn.
❤️ Become a Tarobro on Patreon: / tarodev
=========
🔔 SUBSCRIBE: bit.ly/3eqG1Z6
🗨️ DISCORD: / discord
✅ MORE TUTORIALS: / tarodev
0:00 - Overview
0:47 - Solution + Project Setup
2:43 - SharedLibrary
4:20 - PlayerController
5:43 - Get
6:45 - Post
7:49 - FromQuery
9:31 - Program.cs Cleanup and Overview
11:11 - Adding a Service + Dependency Injection
15:03 - Postman
16:14 - Unity Project Setup
17:17 - Sharing Models via DLLs
19:37 - Unity Web Request
21:00 - JSON workarounds / bugfixes
23:39 - Get from server endpoint
Пікірлер: 249
Never used C# outside of Unity. This is a really mind blowing content for me. Please keep on continuing the series!
@SashokDa
2 жыл бұрын
Same
@GameDevNerd
2 жыл бұрын
You're definitely missing out on a really, really big and amazing world of C#. Learning C# via Unity definitely seems to create a lot of bad habits for junior devs and I notice people who have never stepped outside of Unity usually have great, big gaps in their understanding of C# and OOP ... for example, junior devs who have worked with Unity for 1 to 3 years will often make every single thing a MonoBehaviour, even when that's a terrible idea, and won't know how to write a regular C# class of their own and simply instantiate it with a constructor. So I often have to provide intense, focused training for junior devs to fix this and fill the gaps. You'd be surprised how many of them think int and float are the only primitive data types and can't distinguish between value vs reference types (structures vs classes) or where they live. I wholeheartedly recommend everyone reads a traditional C# programming book and practices writing some console apps, because Unity tutorials generally only show bad ways to use a tiny part of the C# language to complete a sketchy and flimsy feature. Otherwise people will have a huge struggle trying to learn to put their Unity knowledge into a real game that can scale up and be maintained.
@Pete107
2 жыл бұрын
The history of C# (.NET actually) is quite interesting. They've gone from being platform specific (Windows) to full cross-platform with the introduction of .NET Core, performance has also seen a massive improvement. Don't let the frameworks put you off however, the main thing to keep in mind now is to go for anything that is .NET 6 + (.NET 7 to be released later this year which will include MAUI which is something I've been keeping my eye on for some time)
@littleduck985
3 ай бұрын
Wow, you mean that a widely known Object-Oriented Programming language is used for more things than making games in a single game engine? TOTALLY MINDBLOWING
I know it’s important to have a tutorial for every section of each new step but I think it’s SUPER important to see the grand scope of a project as quickly as possible. So new coders can visualize all the steps and how they interconnect. Excellent tutorial! I hope you create more in this vein in the future :)
@Tarodev
2 жыл бұрын
That's what I was thinking. I don't think there is something like this on the internet right now and it should be super handy for somebody wanting to see it from start to finish. It shows how to piece it all together as well as a bunch of points to google and learn.
This was exactly the video I was looking for today with exactly the right level of detail for me, much appreciated!
I spent 3 weeks searching for a solution like this.. 3 weeks!! I love your tutorial so much, its so similar to how Laravel works except this is in C# which is just that beautiful to do. Thank you so much!!
Great content - keep making more - and complete this series.
Once again good stuff dude. Love that models can be shared.
Love these tutorials, can't wait for more
Love your passion for servers too
I have a feeling that this vid will be SUPER useful
Very cool video, especially the bit about dependency injection helps my brain to slowly wrap around the concept.
Just what I've needed! Thanks!
I was waiting for that!
This was a-maze-ing! You are so underrated!
This is exactly what I needed, thank you very much!
I've been working on Java web APIs for coming on 5 years now and never really understood the root of how it works because it never really mattered for getting my tasks done. Funny how the place I learn about how it all works is on a guide video for my hobby projects. As always, love the stuff you put out. Big fan of your style of teaching and how you assume I have some knowledge or at least am capable of getting that knowledge if necessary.
@Tarodev
2 жыл бұрын
That's the exact attitude I wish for from my viewers. That they're okay for me to glance over something and to google it for more info.
@ewwitsantonio
2 жыл бұрын
@@Tarodev Yes I really appreciate your pace! It's perfect for my skill level and experience.
lot's of " .Net core 6 in 2\3\4\100 hours full course" videos out there and i learned far more in this 24 minutes video! thanks!
@trashcaster
2 жыл бұрын
Cause Tarodev is a boss! It's always easy to follow along with his videos because he breaks it down in layman's terms effectively, and has enough humor to make it an enjoyable experience
@verified_tinker1818
2 жыл бұрын
I've yet to find a good, up-to-date .NET course that isn't stretched to infinity and beyond. They're designed for people completely new to programming, which makes them a slog if you aren't. And oftentimes, even if you replicate the code and environment exactly, what works in the tutorial may break on your PC. Chasing down a fix through StackOverflow for technology you don't understand is a pain and a turn-off. This applies to the official documentation, even.
The final step most of these tutorials leave out is actually hosting a server. I hope you get into that at the end of this series!
@ewwitsantonio
2 жыл бұрын
Agreed. Would be nice to see this deployed and what the cost/speed of the servers would be in an affordable tier. I've thrown some .NET web APIs on free tier Azure but it is not ideal for anything beyond small tests.
@matthewmathis62
2 жыл бұрын
Yeah, Microsoft Azure would be cool! I think I did this a long time ago and had a website. I think I owe them money, actually.... *hides head*
Yess. Cant wait for part 2. Could even make more tuts about that
@Tarodev
2 жыл бұрын
Coming right up!
looking forward to the next part
This is amazing. Like REALLY AMAZING. Thanks a lot!
I have been working for companies as a programmer for about 5 years and your videos are exactly what was missing for someone like me to get into a new tool as fast as possible. I will check out your channel if you have any video for BaaS techs.
@Tarodev
2 ай бұрын
I've been hugely into BaaS over the last two years, but unfortunately no content. Glad you enjoyed the video :)
Love the rant in the end btw xD
@Tarodev
2 жыл бұрын
Regarding the json utility? Lol yeah, it's a huge pain
Knew all of these already, but cool tutorial! :)
just what i was looking for
15:50 nah this is awesome, you show a lot of different things so we can understand what to learn more
Amazing video well done
Instead of having a class library project outside Unity and copying the built DLL into Unity there are two other solutions one can try: 1. Create a SharedLibrary folder within Unity and create an assembly definition file so Unity treats it as a separate c# project. Now in the standalone solution you can also create a SharedLibrary project and inside its csproj file just define that it should link in all the files from the SharedLibrary folder inside Unity. Now both Unity and standalone solution see the same files on the hard drive and you can change them from either place. AsmDef is important so you don't accidentally reference other code from within Unity that is not part of that folder. This is the method I used with success in the past. 2. If you have AsmDef file in that Unity folder Unity will actually generate a csproj file for that folder in the root of the project, so you could just try to directly link that csproj inside your standalone solution. This I haven't tried.
@Tarodev
2 жыл бұрын
Very nice!! Thanks for the info
@powercore2000
Жыл бұрын
I tried out the second method method, and while it worked initially it seems fragile as Visual Studio misconfigured the path of the unity csproj's corresponding dll file after being reopened. I found that instead of directly linking the csproj, link the SharedLibrary.dll from unity as a dependency for the Server solution. The SharedLibrary.dll should be generated in Library/ScriptAssemblies.
@shunpeng5700
9 ай бұрын
I use chatGPT for clearer instruction in the option 1 and it worked Here are the steps in more detail: Create a SharedLibrary Folder in Unity: - In Unity's Project window, right-click in the Assets folder or wherever you want to store your shared code. - Choose "Create" > "Folder" and name it something like "SharedLibrary." Create an Assembly Definition File in Unity: - Within the "SharedLibrary" folder, create an assembly definition file (AsmDef) by right-clicking, choosing "Create" > "Assembly Definition," and giving it an appropriate name. - The AsmDef file helps Unity treat this folder as a separate C# project and manage its dependencies correctly. Create a SharedLibrary Project in Your Standalone Solution (e.g., Visual Studio): - In your standalone solution (e.g., Visual Studio), create a new project that represents your shared code library. This project should not have its own source files; instead, it will link to the files in the "SharedLibrary" folder in Unity. Edit the .csproj File of the SharedLibrary Project (StandAlone Solution): - Open the .csproj file of the "SharedLibrary" project in a text editor. - Inside the .csproj file, you'll define that it should link in all the C# files from the "SharedLibrary" folder inside Unity. This is typically done using ItemGroup elements in the .csproj file. For example: - Make sure to adjust the path to match your Unity project's directory structure. Managing Shared Code: - With this setup, both Unity and your standalone solution will see the same code files from the "SharedLibrary" folder. You can make changes to these files from either place, and the changes will be reflected in both environments. Benefits of Assembly Definition (AsmDef): - The AsmDef file is crucial because it defines the scope of what code Unity should consider when building. It ensures that Unity only includes code from within the "SharedLibrary" folder and not unintentional references to unrelated code.
@iamtearabyte4595
7 ай бұрын
@@shunpeng5700 Hey, I tried following the steps written here but I'm really confused on the linking to the files in unity part because the SharedLibrary doesn't contain anything but the assembly definition and no .cs files. I think I might be just dumb, but can I get some clarification on that part?
@iamtearabyte4595
7 ай бұрын
Nvm, I managed to do it now. I should not have ignored the "This project should not have its own source files" since I thought that all the code is doing is just copying and pasting the dll to the SharedLibrary folder in unity upon compiling or something. If you followed the tutorial, just move the .cs files under the standalone solution to the SharedLibrary folder in unity and then rebuild the standalone solution. I am dumb indeed
I've been looking for this video for months! You just spiced up my weekend! Thanks mate.
@Tarodev
2 жыл бұрын
Enjoy your spicy weekend!
Fire as always
@Tarodev
2 жыл бұрын
🔥
Very informative Thank you so much
Ugh, where you were 1 month ago?)) Thx for video) ♥️
Omg tysm I was just thinking about doing a multiplayer game!
@Tarodev
2 жыл бұрын
Just in time :)
when i needed a multiplayer tutorial the most! Thaaaaanks Taro!
Enjoyed it very much
@Tarodev
2 жыл бұрын
I'm glad :)
Amazing video , filled with great information Thank you !
Waiting for part two
This is super amazing, Love u
@Tarodev
2 жыл бұрын
Back at ya
Awesome content! This is perfect for me. I'm familiar with .NET Web API on a basic level and use it for small tests/sample projects, but have yet to to tie into my Unity projects. Really excite to see where this goes! Looking forward to how you handle auth, and also curious if deployment will be part of the series? (you may have mentioned that already sorry if i missed it)
This is an amazing video. Thanks a lot. I have some issues with this kind of server, and it's when we have some work with times. For example, a turned base game and a timer for changing the player's turn after its time. It could be so great if you can cover some of it. Cheers.
Who is a web dev and is enjoying this content ? For me because I'm new to game dev and frankly the mindset for game dev is totally different from web dev, i find this video super enjoyable because i know and deeply understand what is he taking about compared to advanced game dev stuff where i feel a bit lost, not the programming part, that's easy but the part about game design, modeling, shaders, million options and toggles in unity editor
@Tarodev
2 жыл бұрын
Glad you enjoy the web dev side of things :)
i love it! please make more video about it
really dope video😁
Just what I was looking for!
As good as always
Thank you for the video! I'm currently learning webdev and yet I only saw nodejs and maybe python for backend solutions. Seeing a statically typed language for webdev/servers gives me new motivation to learn back end ^^' no front to js and python ofc
@Pete107
2 жыл бұрын
Blazor is awesome if you like typed languages for both front and back end. That's not to say you can't still use JS on the front-end, you can have isolated JS/CSS files for pages/components. Invoke JS from C# and vice versa. .NET has vastly improved since the .Netframework days.
Hello Elf Taro, good to see you
@Tarodev
2 жыл бұрын
😂
I love servers, I have one setup for my home, but nothing specialized for games or anything never made anything software wise but and do some server admin stuff. :D
cool! thank you!!
Was about to complain about "Dlls", nice save.
@Tarodev
2 жыл бұрын
Haha 😂
For real time games are you using a custom server as well? great video as always!
love your videos, can you make a complex animation tutorial , always scared of animation with inverse kinematics , layers, events and stuff, your teaching is great
I like this , you are adding some great content
Thank you
This is amazing content!
At 18:18 you could use "$(SolutionDir)" to avoid having to manually go all the way up to the solution directory
I like how you always cover everything I need. Btw will there be in the next episode how to store for example player inventory in the database?
@Tarodev
2 жыл бұрын
Yes, if the next part is not too long I'll include some actual feature suggestions 😊
I think I would have gone with Node until seeing this.. Makes a whole lotta sense keeping the Models in a SharedLibrary.. and the Server bit in C# will keep the project, what's the word.. isomorphic? Another great lesson @Tarodev ... Cheers!
Uploaded just at the time I needed it. How you keep doing this?
@Tarodev
2 жыл бұрын
I'm right outside your window
Hi! Thanks for this awesome content! But i hawe maybe an awkward question. What can you suggest to read to get more involved into backend, servers and client - server architecture for unity developer? Thanks in advance!
Nice tutorial! If you're on Mac, use command 'cp' instead of 'copy'
@Tarodev
2 жыл бұрын
I should have added that, thanks!
Imma have to come back to this when I get smarter
Excellent as usual, thank you. Have you ever thought of webrtc for client server comms? Asking for a friend :)
You gotta make a full round based game (take a simple 2v2v2NPC-on-a-chessboard-with-obstacles match) with server authoritative logic, storing progress and player data in DB. One of the bigger problem I face, when thinking of building own backend, is IAP server side validation - so maybe another topic for you to cover with GREAT value to a lot of people, who rely on Google Play Store, where due to policies all purchases has to be through their services.. so they grab 30% of the revenue. Yay..
@nikokune1395
Жыл бұрын
.. did I mention a tutorial about Redis cache also :D
TaroDev, it would be awesome if you did a series showing how to make a game like Super Auto Pets. It looks like that game emulates a massive multiplayer game by matching a player with other previously recorded players because no user interaction is needed during the game simulation.
@Tarodev
2 жыл бұрын
Seems like most mobile multiplayer games are like that nowadays. Very interesting video idea!
nice !
This was an excellent video. I come from a low-level background and over the last 15 or so years I've never stepped into the world of servers and web apps. But lately this has been my "final frontier" I've wanted to learn, and I've been writing some desktop utilities doing various stuff with System.Net and System.Web, like scraping pages and downloading remote databases and assets. Creating my own web servers and APIs is what I've been wanting to get into next, so I can dive into the AWS platform and start providing some interesting web services and servers for games and apps. So I truly thank you for this excellent video, I'll be trying this out and trying to get my own servers running on AWS soon!
Keep up your work and u will reach the top when it comes to Unity contant on KZread
yesss
As a .net dev I highly appreciate this series. I once wrote a simple matchmaking tool and I still remember which pain the Unity part was. Now I'm at a point in my game where I want to implement some simple things like Highscores and struggle with the decision of trying it again or just use some premade solutions. Does your solution work in WebGl? Because besides unity often being "special" WebGl is the real pain in my opinion xD
@Tarodev
2 жыл бұрын
It'll be perfectly fine in webGL 😊
@KeyboardKrieger
2 жыл бұрын
@@Tarodev I'll count on that mate
Thank for sharing! I have a question. Is there any game server framework like Nakama that using .Net Core? It may be super helpful for the client dev like me
would this setting work for a massive online game or more of a multiplayer hosting situation where a few players can get into a game?
Yes... Yes... Yes... YESSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
I would really like this series to continue. Is implementing SignalR a good option for syncing the data? Otherwise, I am requesting a bundle of requests to the server every few milli-seconds (for a single session!). I gave up implementing SignalR for now because I could never make Microsoft.AspNet.SignalR.Client package work in Unity.
Great video! It's exactly what I needed for a school project. I have a question though. After I make the build, I would like that when I open the Game.exe, it starts the dotnet server by its own, and of course be able to make API calls. And if it is possible, when I close the game window, it also terminates the server process. It would be a huge help if you could share your thoughts on this matter. Also if there are any differences between solving this issue on Windows or Linux clarify them please.
"It's gonna make Unity shit it's pants" 😂 Best quote since Unity shit it's pants for everything all day long hahaha
❤️
I think you can use Newtonsoft in Unity as well
I came across this video and found it very interesting. I do have a question regarding async void. It is adviced to not use it. Is Unity handling this differently? By all means, as far as I understood it always should be a Task or you might end up with other problems.
Is this like a serverclient you can put on a pc running at home, like Minecraft (atleast back in the day) use to host your own private server?
Lesgoo
5:27 Yes it can.
@Tarodev
2 жыл бұрын
Amazing! It's slowly bridging the gap and will make resharper useless one day
Can you make a UDP communication tutorial in the future?
Marry me Q-Q I've been looking gor something like this for years. Thanks man ❤️
@Tarodev
Жыл бұрын
Where will we go on honeymoon?
17:00 Don't know how it is with Rider but in Visual Studio you can just open the same solution in another instance of VS. I used to debug two LAN apps this way and I had no issues with it. I suppose it works similar in game-server scenario.
So for unity backend we're using NOT classic REST endpoints, but just entity/Get and so on?
Sir please make dependency injection video with more detail
20:03 clean get post code
@Tarodev
2 жыл бұрын
Steal it at will!
Hello, is there a good free alternative for a Postman?
Lol at the first server image
Hey that's one great video. Regarding the sharing of models, I am doing something similar in my project, but instead of copying the DLL file on build I use Git Submodules for the shared code/models. Don't say it is better approach, but it kind of works for me. The build-in Unity json parser and httpClient is dogs**t. I cannot believe how bad they implemented it. I am just using newtonsoft in both API and Unity. Regarding the http client, I still cannot find good library online. The approach you are using looks nice. I would definitely love to see more videos from the series!
@Tarodev
2 жыл бұрын
Git submodules you say... I'd like to know more
@victorlapin2080
2 жыл бұрын
Submodules tend to play nuts with me 😆 but yeah, that's a totally valid approach
Thank you on a Get function, i get this error on Swagger "403 Undocumented Error: Forbidden" and on Response headers content-length: 0 date: Fri,08 Jul 2022 11:49:54 GMT server: Kestrel what can I do?
I'm just getting started on migrating some .NET 5 APIs to .NET 6, and I had no idea they merged they Program & Startup files into one. That is _significantly_ better, and I wish I knew about it sooner.
@Tarodev
2 жыл бұрын
Oh dude, it's beautiful. Might be confusing to new devs as they may not understand it's split into two sections. But yeah, much better.
Thanks Tarodev ❤ Please a tutorial for multiplayer with Unity 🙏🙏
@Tarodev
2 жыл бұрын
Well, this is the start of it :)
After going through the turorial and not having any background info into it, I'd say its not something see and follow but rather creating dots kindoff concept. Introducing many streams that are untouched for devs who are in the C# environment have not stepped out of unity.
This is a pretty solid tutorial, but it's tough to take it seriously with the elf ears.
@Tarodev
2 жыл бұрын
You must absorb knowledge from even the biggest of idiots
I like the video, but there is a weird orc with elf ears that is present from start to finish... Just kidding! :D Great job!
@Tarodev
2 жыл бұрын
I like to think I'm an elf with elf ears :)
could we .... include the Unity and the server VS Project into 1 VS Solution, and refer to that shared library? Just thinking...🤔🤔
Would it be easy enough to make something like this but with websockets instead of http?
hi bro , is this work on android game projects?
Well this is amazing, thanks a lot for that, didn't know this can be done so cleanly! Do you perhaps have any ETA on the second part? Would love to see that one too!
@Tarodev
2 жыл бұрын
Hopefully it's the next video I release!
@jakubreichman
2 жыл бұрын
@@Tarodev That would be great! If you don't mind asking, as I don't really have any experience with deploying asp.net applications, can they be simply uploaded to the web hosting services FTP that most of the people have, or do we need to rent a virtual machine in order to have a running server there that can operate those? Up until now I have actually been doing post/get implementations through PHP scripts uploaded to the hosting providers FTP that communicate with the database, but it is quite tedious to set up and this just seems like a cleaner solution. PHP Scripts can be simply uploaded to the ftp and called via HTTP request, it would be great to know if using asp.net applications would be possible to do similarly without the need of renting an extra virtual machine. Maybe I'm completely off with this, but I think it might be a bit of an unclear topic for others too, so it may be a good point to touch upon a bit in the next video, just to mention it briefly. Thanks again for making all of this, it's crazy valuable content!
@Tarodev
2 жыл бұрын
@@jakubreichman they do need a virtual machine, although azure has very cost effective Web-app services which abstract all the tedious parts for you. They have a free development tier also. You can deploy directly to azure via your IDE, or easily setup CI using github actions or alternatives. I've always loved the Microsoft deploy workflows
@jakubreichman
2 жыл бұрын
@@Tarodev Thanks for the tip, just made Azure account and tried deploying the first sample scene they provided with the free tier, worked great with visual studio code! You have no idea how well timed this video was, I was already preparing myself mentally of again making the database communication via PHP which is an actual nightmare to maintain and any changes cause so much headache and potential issues, don't get me even started on this. The second part video is also amazing I was just staring at the screen and wondering how easy a database implementation can actually be, and any changes to the classes are not major pain points where you can just update it and it works. Seeing it was really amazing ... You sir, just saved me a lot of nerves and precious time, thanks a lot for that! If there is anything that I could do to help you just let me know, I owe you something!
@Tarodev
2 жыл бұрын
@@jakubreichman I'm glad you could work out the deployment so easily. I'm debating a part 3 at some stage where I show how to setup a deployment pipeline. And yeah, entity framework makes DB management an absolute cakewalk.