Lingara Lingara Ohjeet Oppaat API Kirjastot Sovellukset Rakenna Upotus Verkkosovellus
Kieli: Suomi

Unity

Tämä sivu on käännetty englannista. Jos ne eroavat toisistaan, englanninkielinen sivu on oikea. Lue englanninkielinen sivu

Lingara.Embed on NuGet-paketti Lingaran pelaajaytimen päällä. Se sisältää natiivikirjaston jokaiselle viidestä alustasta, joita pelaajapaketit tukevat: Windows, macOS, Linux, Android ja iOS.

Asenna paketti

Unity ei lue NuGet-paketteja itsestään, joten asenna ensin NuGetForUnity. Lisää sitten Lingara.Embed tiedostoon Assets/packages.config alla olevan mallin mukaan. NuGetForUnity palauttaa paketin ja sijoittaa kunkin alustan natiivikirjaston sinne, missä Unity sitä odottaa.

Alla oleva esimerkkikomponentti, LingaraEmbedBehaviour, ei kuulu pakettiin: lisää sen lähdekoodi projektiisi, liitä se GameObjectiin ja kuuntele sen C#-tapahtumia. Se luo asiakkaan herätessään ja vapauttaa sen, kun se tuhotaan, kun peli suljetaan ja ennen kuin editori lataa skriptisi uudelleen.

Hae tunnukset palvelimeltasi

Paketti ei koskaan säilytä salaisuutta. Kun asiakas tarvitsee tunnuksen, se ilmoittaa siitä tapahtumalla TokenNeeded. Komponentti vastaa siihen korutiinilla, joka lähettää pyynnön oman palvelimesi tunnusreitille; palvelin luo tunnuksen palvelinpaketilla ja vastaa tunnuksella ja sen vanhenemisajalla. Jos palvelimesi ei pysty vastaamaan, kutsu TokenUnavailable, jotta tunnusta odottavat kutsut epäonnistuvat heti sen sijaan, että ne aikakatkaistaisiin.

Tyhjennä tapahtumat Updatessa

Ydin suorittaa verkko-I/O:nsa omassa säikeessään. Komponentti tyhjentää kohdassa Update sen, mitä on saapunut edellisen ruudunpäivityksen jälkeen, enintään 256 tapahtumaa ruudunpäivitystä kohden, ja välittää kunkin eteenpäin: tunnuspyynnön, virtautetun NPC-vastauksen (katso NPC-dialogit), harjoittelun päivityksen (katso harjoittelun tulokset), pelaajaa koskevan tapahtuman tai virheen.

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