Lingara Lingara Dokumentasi Panduan API Pustaka Aplikasi Buat Sematkan Aplikasi web
Bahasa: Bahasa Indonesia

Unity

Halaman ini diterjemahkan dari bahasa Inggris. Jika keduanya berbeda, halaman bahasa Inggris yang benar. Baca halaman bahasa Inggris

Lingara.Embed adalah paket NuGet di atas inti pemain Lingara. Paket ini membawa library native untuk masing-masing dari lima platform yang didukung kit pemain: Windows, macOS, Linux, Android, dan iOS.

Instal paket

Unity tidak membaca paket NuGet dengan sendirinya, jadi instal NuGetForUnity terlebih dahulu. Lalu tambahkan Lingara.Embed ke Assets/packages.config, seperti di bawah. NuGetForUnity memulihkan paket dan menempatkan library native setiap platform di tempat yang diharapkan Unity.

Komponen contoh di bawah, LingaraEmbedBehaviour, bukan bagian dari paket: masukkan sumbernya ke proyek Anda, pasang pada sebuah GameObject, dan dengarkan event C# komponen itu. Komponen membuat klien saat bangun dan membuangnya saat dihancurkan, saat game ditutup, dan sebelum editor memuat ulang skrip Anda.

Dapatkan token dari server Anda

Paket tidak pernah menyimpan secret. Saat klien membutuhkan token, klien menyatakannya dengan event TokenNeeded. Komponen menjawabnya dengan coroutine yang mengirim ke rute token server Anda sendiri, yang mencetak dengan kit server dan menjawab dengan token beserta waktu kedaluwarsanya. Jika server Anda tidak dapat menjawab, panggil TokenUnavailable agar panggilan yang menunggu token langsung gagal alih-alih kehabisan waktu.

Kosongkan event di Update

Inti menjalankan I/O jaringannya di thread-nya sendiri. Di Update, komponen mengosongkan apa yang tiba sejak frame terakhir, paling banyak 256 event per frame, dan meneruskan masing-masing: permintaan token, balasan NPC yang dialirkan (lihat dialog NPC), pembaruan latihan (lihat hasil latihan), event tentang pemain, atau kegagalan.

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