Let's say you have a Unity project where all user interactions must be stored on a server.
One example would be a chess game where all the moves are recorded for replay or continued play on another device.
There's no need to broadcast the data to any other users so a realtime, multiplayer server is not needed. You just need a database and way to write to it.
Some of you might be tempted to run a headless Unity on a server that then writes to a database.
You can do this but the headaches will outweigh any savings from a single codebase. You generally don't want to run Unity on or as a web server.
Here are 3 better, modern options you can use instead.
Using a hosted Platform as a Service (PaaS) solution is going to be the easiest.
All the mentioned services have a Unity SDK you can use for quick and mostly painless integration.
PlayFab and GameSparks are geared towards games but they may have way more services than you need for simply storing user data.
Firebase has several services as well but they are best known for their NoSQL database product.
All three are a great choice and provides a free/development tier. If you can't decide which then just pick based on whether you like Microsoft, Amazon, or Google better. The tech giants own one of each respectively. 😎
This will be more complicated than a PaaS solution but still saves you from having to manage servers and can automatically scale to any load.
Your best bet is to use a serverless function and a serverless database combination to expose endpoints to call using
They are products like:
One downside to this option compared to PaaS is that you'll have to implement some way to secure your functions and/or your database.
Azure Functions and AWS Lambda both support C# which is a plus for having a consistent language across client and server.
One variation of note is to use a serverless function with a traditional SQL database but this will likely cost more.
Heroku does not officially support C# but there are community buildpacks with .NET support.
With this option, you'll have to implement a REST server that talks to a database, secure it, and handle scaling.
If you've worked on REST backends in the past than this might actually be simpler than the serverless option. Serverless is a different paradigm that can take some time to get used to.
One drawback with this option compared to serverless is the cost if you are expecting a lot of idle time.
Heroku does allow you to deploy for free since they will put your node to sleep after inactivity but most other services require you to pay for each hour the server is running.
If you don't care about backends or servers then go with a PaaS solution. They are easy to integrate, scale automatically, and you can get started for free.
How can you beat that?
Let me know in the comments below if you'd like an in-depth guide with code examples for any of the above options. Be sure to include the platform! 👌
Don't miss out on future Unity techniques! Enter your email into the box below to subscribe.