Lingara Lingara Documentación Guías API Bibliotecas Apps Crear Integración Aplicación web
Idioma: Español

Unity

Esta página está traducida del inglés. Si ambas difieren, la página en inglés es la correcta. Leer la página en inglés

Lingara.Embed es un paquete NuGet sobre el núcleo de jugador de Lingara. Contiene la biblioteca nativa de cada una de las cinco plataformas que admiten los kits de jugador: Windows, macOS, Linux, Android e iOS.

Instalar el paquete

Unity no lee paquetes NuGet por sí solo, así que instala primero NuGetForUnity. Después añade Lingara.Embed a Assets/packages.config, como se muestra abajo. NuGetForUnity restaura el paquete y coloca la biblioteca nativa de cada plataforma donde Unity la espera.

El componente de ejemplo de abajo, LingaraEmbedBehaviour, no forma parte del paquete: coloca su código fuente en tu proyecto, ponlo en un GameObject y escucha sus eventos de C#. Crea el cliente al despertar y lo libera cuando se destruye, cuando el juego se cierra y antes de que el editor recargue tus scripts.

Obtener tokens de tu servidor

El paquete nunca guarda un secreto. Cuando el cliente necesita un token, lo indica con un evento TokenNeeded. El componente lo responde con una corrutina que hace una petición a la ruta de tokens de tu propio servidor, que emite con un kit de servidor y responde con el token y su caducidad. Si tu servidor no puede responder, llama a TokenUnavailable para que las llamadas que esperan un token fallen de inmediato en lugar de agotar el tiempo de espera.

Vaciar los eventos en Update

El núcleo ejecuta su E/S de red en su propio hilo. En Update, el componente vacía lo que ha llegado desde el último fotograma, como máximo 256 eventos por fotograma, y despacha cada uno: una solicitud de token, una respuesta de PNJ en streaming (consulta Diálogo con PNJ), una actualización de práctica (consulta resultados de práctica), un evento sobre el jugador o un fallo.

Unity

<?xml version="1.0" encoding="utf-8"?>
<!-- Assets/packages.config, after installing NuGetForUnity: it restores Lingara.Embed and places each platform's native library. -->
<packages>
  <package id="Lingara.Embed" version="0.1.0-alpha.6" manuallyInstalled="true" />
</packages>

Unity

[Serializable]
private struct Handoff { public string token; public string expires_at; }

// Your own server mints the token: never put a client secret in a game.
private IEnumerator FetchToken()
{
    using (var request = UnityWebRequest.PostWwwForm(tokenUrl, string.Empty))
    {
        yield return request.SendWebRequest();
        if (Client == null) yield break;
        if (request.result != UnityWebRequest.Result.Success)
        {
            Client.TokenUnavailable(request.error); // fail the waiting calls now
            yield break;
        }
        var handoff = JsonUtility.FromJson<Handoff>(request.downloadHandler.text);
        Client.ProvideToken(handoff.token, handoff.expires_at);
    }
}

Unity

private void Update()
{
    if (Client == null) return;
    events.Clear();
    Client.Drain(events); // at most 256 a frame; the rest wait for the next
    foreach (var e in events)
    {
        switch (e)
        {
            case EmbedEvent.TokenNeeded _: StartCoroutine(FetchToken()); break;
            case EmbedEvent.NpcTurn turn: NpcTurn?.Invoke(turn); break;
            case EmbedEvent.Practice practice: Practice?.Invoke(practice); break;
            case EmbedEvent.LingaraReceived received: LingaraReceived?.Invoke(received); break;
            case EmbedEvent.Failed failed: Failed?.Invoke(failed); break;
            case EmbedEvent.Log log: Debug.Log($"[lingara] {log.Level} {log.Target}: {log.Message}"); break;
        }
    }
}