Unity
دا پاڼه له انګلیسي ژبې ژباړل شوې ده. که دواړه سره توپیر ولري، انګلیسي پاڼه سمه ده. انګلیسي پاڼه ولولئ
Lingara.Embed د NuGet یوه کڅوړه ده چې د Lingara د لوبغاړي پر هسته ولاړه ده. دا د هغو پنځو پلاتفورمونو هر یوه لپاره اصلي کتابتون لري چې د لوبغاړي کیټونه یې ملاتړ کوي: Windows، macOS، Linux، Android او iOS.
کڅوړه نصب کړئ
Unity پخپله د NuGet کڅوړې نه لولي، نو لومړی NuGetForUnity نصب کړئ. بیا Lingara.Embed په Assets/packages.config کې ور زیات کړئ، لکه څنګه چې لاندې ښودل شوي. NuGetForUnity کڅوړه بېرته راوړي او د هر پلاتفورم اصلي کتابتون هلته ږدي چې Unity یې تمه لري.
لاندې نمونه برخه، LingaraEmbedBehaviour، د کڅوړې برخه نه ده: د هغې سرچینه خپلې پروژې ته واچوئ، په یوه GameObject یې کېږدئ، او د هغې C# پېښو ته غوږ ونیسئ. دا کلاینټ هغه وخت جوړوي چې راویښه شي، او هغه وخت یې له منځه وړي چې پخپله ړنګه شي، کله چې لوبه بنده شي، او مخکې له دې چې اډیټر ستاسو سکرېپټونه بیا بار کړي.
ټوکنونه له خپل سرور څخه واخلئ
کڅوړه هېڅکله راز نه ساتي. کله چې کلاینټ ټوکن ته اړتیا ولري، دا د یوې TokenNeeded پېښې په مرسته وايي. برخه ورته د یوه coroutine په مرسته ځواب ورکوي چې ستاسو د خپل سرور د ټوکن لارې ته غوښتنه لېږي، چې د یوه سرور کیټ په مرسته ټوکن جوړوي او د ټوکن او د هغه د پای ته رسېدو د وخت په لېږلو ځواب ورکوي. که ستاسو سرور ځواب ورنه کړای شي، 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;
}
}
}