Lingara Lingara Documentação Guias API Bibliotecas Aplicações Criar Incorporar Aplicação web
Idioma: Português

Unity

Esta página é uma tradução do inglês. Se as duas diferirem, a página em inglês é a correta. Ler a página em inglês

Lingara.Embed é um pacote NuGet sobre o núcleo de jogador do Lingara. Contém a biblioteca nativa de cada uma das cinco plataformas que os kits de jogador suportam: Windows, macOS, Linux, Android e iOS.

Instalar o pacote

O Unity não lê pacotes NuGet por si só, por isso instale primeiro o NuGetForUnity. Depois, adicione Lingara.Embed a Assets/packages.config, como abaixo. O NuGetForUnity restaura o pacote e coloca a biblioteca nativa de cada plataforma onde o Unity a espera.

O componente de exemplo abaixo, LingaraEmbedBehaviour, não faz parte do pacote: coloque o seu código-fonte no seu projeto, adicione-o a um GameObject e ouça os seus eventos C#. Cria o cliente quando acorda e liberta-o quando é destruído, quando o jogo termina e antes de o editor recarregar os seus scripts.

Obter tokens do seu servidor

O pacote nunca guarda um segredo. Quando o cliente precisa de um token, indica-o com um evento TokenNeeded. O componente responde-lhe com uma corrotina que faz um pedido à rota de tokens do seu próprio servidor, que emite com um kit de servidor e responde com o token e a sua validade. Se o seu servidor não puder responder, chame TokenUnavailable para que as chamadas que aguardam um token falhem de imediato em vez de esgotarem o tempo limite.

Esvaziar os eventos em Update

O núcleo executa a sua E/S de rede no seu próprio thread. Em Update, o componente esvazia o que chegou desde o último frame, no máximo 256 eventos por frame, e despacha cada um: um pedido de token, uma resposta de NPC em streaming (consulte Diálogo com NPC), uma atualização da prática (consulte resultados da prática), um evento sobre o jogador ou uma falha.

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;
        }
    }
}