Lingara Lingara Dokumentasyon Mga gabay API Mga library Mga app Gumawa Embed Web app
Wika: Filipino

Unity

Isinalin mula sa Ingles ang pahinang ito. Kung magkaiba ang dalawa, ang pahinang Ingles ang tama. Basahin ang pahinang Ingles

Ang Lingara.Embed ay isang NuGet package na nakapatong sa player core ng Lingara. Dala nito ang native library para sa bawat isa sa limang platform na sinusuportahan ng mga player kit: Windows, macOS, Linux, Android at iOS.

I-install ang package

Hindi kusang binabasa ng Unity ang mga NuGet package, kaya i-install muna ang NuGetForUnity. Pagkatapos, idagdag ang Lingara.Embed sa Assets/packages.config, gaya ng nasa ibaba. Nire-restore ng NuGetForUnity ang package at inilalagay ang native library ng bawat platform kung saan ito inaasahan ng Unity.

Ang sample component sa ibaba, ang LingaraEmbedBehaviour, ay hindi bahagi ng package: ilagay ang source nito sa iyong project, ilagay ito sa isang GameObject, at pakinggan ang mga C# event nito. Ginagawa nito ang client kapag nagising ito at dini-dispose ito kapag sinira ito, kapag huminto ang laro, at bago i-reload ng editor ang iyong mga script.

Kumuha ng mga token mula sa iyong server

Hindi kailanman humahawak ng secret ang package. Kapag kailangan ng client ng token, sinasabi nito ito gamit ang isang TokenNeeded na event. Sinasagot ito ng component gamit ang isang coroutine na nagpo-post sa token route ng sarili mong server, na nagmi-mint gamit ang isang server kit at sumasagot gamit ang token at ang expiry nito. Kung hindi makasagot ang iyong server, tawagin ang TokenUnavailable para agad na mabigo ang mga tawag na naghihintay ng token sa halip na mag-time out.

Ubusin ang mga event sa Update

Pinapatakbo ng core ang network I/O nito sa sarili nitong thread. Sa Update, inuubos ng component ang mga dumating mula noong huling frame, hanggang 256 na event bawat frame, at ipinapasa ang bawat isa: isang token request, isang naka-stream na sagot ng NPC (tingnan ang usapan ng NPC), isang update ng pagsasanay (tingnan ang mga resulta ng pagsasanay), isang event tungkol sa player, o isang pagkabigo.

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