Lingara Lingara ឯកសារ មគ្គុទ្ទេសក៍សិក្សា API បណ្ណាល័យ កម្មវិធី បង្កើត បង្កប់ កម្មវិធីលើបណ្ដាញ
ភាសា: ខ្មែរ

Unity

ទំព័រនេះត្រូវបានបកប្រែពីភាសាអង់គ្លេស។ ប្រសិនបើទាំងពីរខុសគ្នា ទំព័រភាសាអង់គ្លេសគឺត្រឹមត្រូវ។ អានទំព័រភាសាអង់គ្លេស

Lingara.Embed គឺជាកញ្ចប់ NuGet មួយដែលដំណើរការលើស្នូលអ្នកលេងរបស់ Lingara។ វាផ្ទុកបណ្ណាល័យ native សម្រាប់វេទិកានីមួយៗក្នុងចំណោមវេទិកាទាំងប្រាំដែលកញ្ចប់ឧបករណ៍អ្នកលេងគាំទ្រ៖ Windows, macOS, Linux, Android និង iOS។

ដំឡើងកញ្ចប់

Unity មិនអានកញ្ចប់ NuGet ដោយខ្លួនឯងទេ ដូច្នេះសូមដំឡើង NuGetForUnity ជាមុនសិន។ បន្ទាប់មកបន្ថែម Lingara.Embed ទៅក្នុង Assets/packages.config ដូចខាងក្រោម។ NuGetForUnity ស្ដារកញ្ចប់ឡើងវិញ ហើយដាក់បណ្ណាល័យ native របស់វេទិកានីមួយៗនៅកន្លែងដែល Unity រំពឹងទុក។

component គំរូខាងក្រោម LingaraEmbedBehaviour មិនមែនជាផ្នែកមួយនៃកញ្ចប់ទេ៖ ដាក់កូដប្រភពរបស់វាទៅក្នុងគម្រោងរបស់អ្នក ដាក់វានៅលើ GameObject មួយ ហើយស្ដាប់ព្រឹត្តិការណ៍ C# របស់វា។ វាបង្កើតក្លាយអិននៅពេលវាភ្ញាក់ ហើយបោះបង់វានៅពេលវាត្រូវបានបំផ្លាញ នៅពេលហ្គេមបិទ និងមុនពេលកម្មវិធីកែសម្រួលផ្ទុកស្គ្រីបរបស់អ្នកឡើងវិញ។

យកតូខិនពីម៉ាស៊ីនមេរបស់អ្នក

កញ្ចប់មិនដែលកាន់សម្ងាត់ទេ។ នៅពេលក្លាយអិនត្រូវការតូខិន វាប្រាប់ដោយព្រឹត្តិការណ៍ TokenNeeded មួយ។ component ឆ្លើយតបវាដោយ coroutine មួយដែលផ្ញើទៅផ្លូវតូខិន (token route) នៃម៉ាស៊ីនមេផ្ទាល់ខ្លួនរបស់អ្នក ដែលបង្កើតតូខិនដោយប្រើ កញ្ចប់ឧបករណ៍ម៉ាស៊ីនមេ ហើយឆ្លើយតបដោយតូខិន និងពេលផុតកំណត់របស់វា។ ប្រសិនបើម៉ាស៊ីនមេរបស់អ្នកមិនអាចឆ្លើយតបបាន សូមហៅ TokenUnavailable ដើម្បីឲ្យការហៅដែលកំពុងរង់ចាំតូខិនបរាជ័យភ្លាមៗ ជំនួសឲ្យការអស់ពេល។

បង្ហូរព្រឹត្តិការណ៍នៅក្នុង Update

ស្នូលដំណើរការ I/O បណ្ដាញរបស់វានៅលើ thread ផ្ទាល់ខ្លួនរបស់វា។ នៅក្នុង Update component បង្ហូរអ្វីដែលបានមកដល់ចាប់តាំងពីហ្វ្រេមចុងក្រោយ យ៉ាងច្រើនបំផុត 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;
        }
    }
}