Unity
Αυτή η σελίδα έχει μεταφραστεί από τα αγγλικά. Αν οι δύο διαφέρουν, η αγγλική σελίδα είναι η σωστή. Διαβάστε την αγγλική σελίδα
Το Lingara.Embed είναι ένα πακέτο NuGet πάνω από τον πυρήνα παίκτη του Lingara. Περιέχει την εγγενή βιβλιοθήκη για καθεμία από τις πέντε πλατφόρμες που υποστηρίζουν τα κιτ παίκτη: Windows, macOS, Linux, Android και iOS.
Εγκατάσταση του πακέτου
Το Unity δεν διαβάζει μόνο του πακέτα NuGet, οπότε εγκαταστήστε πρώτα το NuGetForUnity. Έπειτα προσθέστε το Lingara.Embed στο Assets/packages.config, όπως παρακάτω. Το NuGetForUnity επαναφέρει το πακέτο και τοποθετεί την εγγενή βιβλιοθήκη κάθε πλατφόρμας εκεί όπου την περιμένει το Unity.
Το component-παράδειγμα παρακάτω, LingaraEmbedBehaviour, δεν αποτελεί μέρος του πακέτου: προσθέστε τον πηγαίο κώδικά του στο έργο σας, τοποθετήστε το σε ένα GameObject και ακούστε τα συμβάντα C# του. Δημιουργεί τον πελάτη όταν ενεργοποιείται και τον αποδεσμεύει όταν καταστρέφεται, όταν τερματίζεται το παιχνίδι και πριν ο editor επαναφορτώσει τα scripts σας.
Λήψη token από τον διακομιστή σας
Το πακέτο δεν κρατά ποτέ κανένα μυστικό. Όταν ο πελάτης χρειάζεται ένα token, το δηλώνει με ένα συμβάν TokenNeeded. Το component απαντά με μια coroutine που στέλνει αίτημα στη διαδρομή token του δικού σας διακομιστή, ο οποίος εκδίδει με ένα κιτ διακομιστή και απαντά με το token και τη λήξη του. Αν ο διακομιστής σας δεν μπορεί να απαντήσει, καλέστε το TokenUnavailable, ώστε οι κλήσεις που περιμένουν token να αποτύχουν αμέσως αντί να λήξει ο χρόνος τους.
Άδειασμα συμβάντων στο Update
Ο πυρήνας εκτελεί το δικτυακό του I/O στο δικό του νήμα. Στο Update, το component αδειάζει ό,τι έφτασε από το τελευταίο καρέ, το πολύ 256 συμβάντα ανά καρέ, και διανέμει το καθένα: ένα αίτημα token, μια απάντηση 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;
}
}
}