Getting the Current Persona

Assets/Emergence/Samples/Examples/GettingCurrentPersona.cs

The example provided at the path above demonstrates two different methods for obtaining the current persona in your Unity project using the EmergenceSDK. We will go through the example code and explain the purpose of each section.

For this code to execute properly you must first have logged in using the Emergence overlay.

First, we need to import the necessary namespaces:

using EmergenceSDK.Runtime.Internal.Services;
using EmergenceSDK.Runtime.Internal.Types;
using UnityEngine;

Next, we define a new class called GettingCurrentPersona, which inherits from MonoBehaviour. This allows us to attach this script to a GameObject in Unity.

class GettingCurrentPersona : MonoBehaviour
{
    private IPersonaService personaService;

    ...
}

We declare a private variable personaService of type IPersonaService, which will be used to access the persona-related services provided by EmergenceSDK.

In the Awake method, we initialize the personaService variable by getting the IPersonaService instance from the EmergenceServices class.

private void Awake()
{
    personaService = EmergenceServiceProvider.GetService<IPersonaService>();
}

The Start method is called at the beginning of the script's execution. Here, we call the GetCurrentPersonaAsync method to obtain the current persona.

private void Start()
{
    GetCurrentPersonaAsync();
}

The GetCurrentPersonaAsync method is an asynchronous method that waits for the personaService to return the current persona. Once the persona is received, it calls the GetPersonaSuccess method. If an error occurs, it will call the ErrorLogger.LogError method to log the error.

private async void GetCurrentPersonaAsync()
{
    await personaService.GetCurrentPersona(GetPersonaSuccess, ErrorLogger.LogError);
}

The GetPersonaSuccess method is called when the personaService successfully returns the current persona.

It logs the current persona to the console and calls the GetCachedPersona method to get the cached persona.

private void GetPersonaSuccess(Persona currentpersona)
{
    Debug.Log($"Found persona: {currentpersona}");
    
    GetCachedPersona();
}

The GetCachedPersona method gets the cached persona from the personaService instance. If a cached persona exists, which it will after using the async method, it logs the cached persona to the console.

private void GetCachedPersona()
{
    if (personaService.GetCachedPersona(out Persona persona))
    {
        Debug.Log($"Found cached persona: {persona}");
    }
}

You should see your persona logged to the console twice.

Full Code:

using EmergenceSDK.Runtime.Internal.Services;
using EmergenceSDK.Runtime.Internal.Types;
using UnityEngine;

namespace EmergenceSDK.Samples.CoreSamples
{
    public class GettingCurrentPersona : MonoBehaviour
    {
        private IPersonaService personaService;

        private void Awake()
        {
            // Initialize the personaService variable by getting the IPersonaService instance from the EmergenceServices class
            personaService = EmergenceServiceProvider.GetService<IPersonaService>();
        }

        private void Start()
        {
            GetCurrentPersonaAsync();
        }

        private async void GetCurrentPersonaAsync()
        {
            // Waits for the personaService to return the current persona and then calls the GetPersonaSuccess method
            await personaService.GetCurrentPersona(GetPersonaSuccess, ErrorLogger.LogError);
        }

        // This method is called when the personaService successfully returns the current persona
        private void GetPersonaSuccess(Persona currentpersona)
        {
            // Logs the current persona to the console
            Debug.Log($"Found persona: {currentpersona}");
            
            // Calls the GetCachedPersona method to get the cached persona
            GetCachedPersona();
        }

        // This method gets the cached persona from the personaService instance
        private void GetCachedPersona()
        {
            // Checks if there is a cached persona and logs it to the console if there is
            if (personaService.GetCachedPersona(out Persona persona))
            {
                Debug.Log($"Found cached persona: {persona}");
            }
        }
    }
}

Last updated