Lingara Lingara Dokumentasie Gidse API Biblioteke Apps Bou Inbed Webtoepassing
Taal: Afrikaans

Unity

Hierdie bladsy is uit Engels vertaal. As die twee verskil, is die Engelse bladsy korrek. Lees die Engelse bladsy

Lingara.Embed is ‘n NuGet-pakket bo-op Lingara se spelerkern. Dit dra die inheemse biblioteek vir elkeen van die vyf platforms wat die spelerkits ondersteun: Windows, macOS, Linux, Android en iOS.

Installeer die pakket

Unity lees nie NuGet-pakkette op sy eie nie, so installeer eers NuGetForUnity. Voeg dan Lingara.Embed by Assets/packages.config, soos hieronder. NuGetForUnity herstel die pakket en plaas elke platform se inheemse biblioteek waar Unity dit verwag.

Die voorbeeldkomponent hieronder, LingaraEmbedBehaviour, is nie deel van die pakket nie: sit sy bronkode in jou projek, plaas dit op ‘n GameObject, en luister na sy C#-gebeurtenisse. Dit skep die kliënt wanneer dit wakker word en ruim dit op wanneer dit vernietig word, wanneer die speletjie afsluit, en voordat die redigeerder jou skripte herlaai.

Kry tokens van jou bediener

Die pakket hou nooit ‘n geheim nie. Wanneer die kliënt ‘n token nodig het, sê dit so met ‘n TokenNeeded-gebeurtenis. Die komponent antwoord dit met ‘n coroutine wat ‘n POST na jou eie bediener se tokenroete stuur, wat met ‘n bedienerkit uitreik en met die token en sy vervaltyd antwoord. As jou bediener nie kan antwoord nie, roep TokenUnavailable aan sodat die oproepe wat op ‘n token wag dadelik misluk in plaas daarvan om uit te tel.

Maak gebeurtenisse in Update leeg

Die kern voer sy netwerk-I/O op sy eie draad uit. In Update maak die komponent leeg wat sedert die vorige raam aangekom het, hoogstens 256 gebeurtenisse per raam, en stuur elkeen deur: ‘n tokenversoek, ‘n gestroomde NPC-antwoord (sien NPC-dialoog), ‘n oefenopdatering (sien oefenresultate), ‘n gebeurtenis oor die speler, of ‘n mislukking.

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