Lingara Lingara दस्तावेज़ मार्गदर्शिकाएँ API लाइब्रेरी ऐप बनाएं एम्बेड वेब ऐप
भाषा: हिन्दी

Unity

यह पेज अंग्रेज़ी से अनुवादित है। अगर दोनों में अंतर हो, तो अंग्रेज़ी पेज सही है। अंग्रेज़ी पेज पढ़ें

Lingara.Embed Lingara के प्लेयर कोर पर बना एक NuGet पैकेज है। इसमें उन पाँच प्लेटफ़ॉर्म में से हर एक के लिए नेटिव लाइब्रेरी है जिन्हें प्लेयर किट सपोर्ट करते हैं: Windows, macOS, Linux, Android और iOS।

पैकेज इंस्टॉल करें

Unity अपने आप NuGet पैकेज नहीं पढ़ता, इसलिए पहले NuGetForUnity इंस्टॉल करें। फिर Lingara.Embed को Assets/packages.config में जोड़ें, जैसा नीचे दिखाया गया है। NuGetForUnity पैकेज को रीस्टोर करता है और हर प्लेटफ़ॉर्म की नेटिव लाइब्रेरी को वहाँ रखता है जहाँ Unity उसकी अपेक्षा करता है।

नीचे दिया गया सैंपल कंपोनेंट, LingaraEmbedBehaviour, पैकेज का हिस्सा नहीं है: उसका सोर्स अपने प्रोजेक्ट में डालें, उसे किसी GameObject पर रखें, और उसके C# इवेंट सुनें। यह जागने पर क्लाइंट बनाता है और नष्ट होने पर, गेम बंद होने पर, और एडिटर द्वारा आपकी स्क्रिप्ट दोबारा लोड करने से पहले उसे डिस्पोज़ करता है।

अपने सर्वर से टोकन पाएँ

पैकेज कभी कोई सीक्रेट नहीं रखता। जब क्लाइंट को टोकन चाहिए होता है, तो वह एक TokenNeeded इवेंट से यह बताता है। कंपोनेंट इसका जवाब एक कोरूटीन से देता है जो आपके अपने सर्वर के टोकन रूट पर पोस्ट करता है, जो सर्वर किट से मिंट करता है और टोकन तथा उसकी समाप्ति के साथ जवाब देता है। अगर आपका सर्वर जवाब नहीं दे सकता, तो TokenUnavailable को कॉल करें ताकि टोकन की प्रतीक्षा कर रहे कॉल टाइम आउट होने के बजाय तुरंत विफल हो जाएँ।

Update में इवेंट खाली करें

कोर अपना नेटवर्क I/O अपने ही थ्रेड पर चलाता है। Update में, कंपोनेंट पिछले फ़्रेम के बाद से आई चीज़ों को खाली करता है, एक फ़्रेम में अधिकतम 256 इवेंट, और हर एक को भेजता है: टोकन अनुरोध, स्ट्रीम किया गया NPC जवाब (देखें NPC संवाद), अभ्यास अपडेट (देखें अभ्यास के परिणाम), खिलाड़ी के बारे में कोई इवेंट, या कोई विफलता।

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