Unity
Ev rûpel ji Îngilîzî hatiye wergerandin. Heke her du ji hev cuda bin, rûpela Îngilîzî rast e. Rûpela Îngilîzî bixwîne
Lingara.Embed pakêteke NuGet e ku li ser navika lîstikvan a Lingara hatiye avakirin. Ew pirtûkxaneya xwecih ji bo her yek ji wan pênc platforman hildigire ku kîtên lîstikvan piştgirî didin: Windows, macOS, Linux, Android û iOS.
Pakêtê saz bike
Unity bi xwe pakêtên NuGet naxwîne, ji ber vê yekê pêşî NuGetForUnity saz bike. Paşê Lingara.Embed li Assets/packages.config zêde bike, wek li jêr. NuGetForUnity pakêtê vedigerîne û pirtûkxaneya xwecih a her platformê li cihê ku Unity li bendê ye datîne.
Pêkhateya nimûneyê ya li jêr, LingaraEmbedBehaviour, ne beşek ji pakêtê ye: çavkaniya wê bixe projeya xwe, wê deyne ser GameObject-ekê, û guh bide bûyerên wê yên C#. Ew klient dema ku şiyar dibe diafirîne û wî ji holê radike dema ku bi xwe tê hilweşandin, dema ku lîstik diqede, û berî ku edîtor skrîptên te ji nû ve bar bike.
Tokenan ji servera xwe bistîne
Pakêt qet nepeniyekê nagire. Dema ku klient tokenek hewce dike, bi bûyereke TokenNeeded vê dibêje. Pêkhate bi coroutine-ekê bersiv dide ku daxwazekê dişîne rêya tokenê ya servera te bi xwe, ku bi kîta serverê tokenê çêdike û bi token û dema qedandina wê bersiv dide. Heke servera te nikaribe bersiv bide, bangî TokenUnavailable bike da ku bangên li benda tokenê di cih de têk biçin li şûna ku dema wan biqede.
Bûyeran di Update de vala bike
Navik I/O-ya xwe ya torê li ser thread-a xwe dixebitîne. Di Update de, pêkhate tiştên ku ji çarçoveya dawî ve gihîştine vala dike, herî zêde 256 bûyer di çarçoveyekê de, û her yekê dişîne cihê wê: daxwazeke tokenê, bersiveke NPC ya ku bi perçeyan tê (binêre Diyaloga NPC), nûkirineke temrînê (binêre encamên temrînê), bûyerek derbarê lîstikvan de, an têkçûnek.
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;
}
}
}