Introduction
Server logic
No matter what backend you are building, you need to have server-side logic. This logic is grouped into so-called facets.
Facet is the face of your backend server. It is what your game client can call remotely.
Below is a HomeFacet
that returns data about the logged-in player when a home scene is loaded:
using System;
using Unisave;
using Unisave.Facades;
using Unisave.Facades;
public class HomeFacet : Facet
{
/// <summary>
/// Returns information about the logged-in player
/// </summary>
public PlayerEntity GetPlayerEntity()
{
// obtain authenticated player ID from the session
// and load player data from the database
PlayerEntity player = Auth.GetPlayer<PlayerEntity>();
// send the data back to the game client
return player;
}
}
Calling server methods
Of course, there needs to be some MonoBehaviour
in the home scene that calls the facet method:
using System;
using Unisave;
using UnityEngine;
public class HomeSceneController : MonoBehaviour
{
async void Start()
{
PlayerEntity player = await OnFacet<HomeFacet>
.CallAsync<PlayerEntity>(
nameof(HomeFacet.GetPlayerEntity)
);
Debug.Log("Player: " + player.nickname);
Debug.Log("Coins: " + player.coins);
}
}
Data
An entity is a collection of data that can be stored in a database.
The PlayerEntity
seen above is defined as follows:
using System;
using Unisave;
public class PlayerEntity : Entity
{
/// <summary>
/// Name displayed to other players
/// </summary>
public string nickname;
/// <summary>
/// Number of coins owned
/// </summary>
public int coins;
}
Entities can be created, saved, modified, and deleted by the server code. They can also be sent to the client and read.
Where to go next
Now you need to know, where to put this code, how to get it onto the server and how to run it. This is described in the next section on workflow.