Sto lavorando a un gioco in unità e ho riscontrato un problema che non riesco a risolvere. Mi collego a un server Web tramite un oggetto WWW standard e utilizzo di una coroutine per eseguire una richiesta POST.Unity: è necessario restituire il valore solo al termine della coroutine
Il codice in sé funziona, ma ho bisogno di aggiornare un valore variabile e restituire quella variabile una volta terminata la coroutine, che non sono in grado di fare.
public int POST(string username, string passw)
{
WWWForm form = new WWWForm();
form.AddField("usr", username);
form.AddField("pass", passw);
WWW www = new WWW(url, form);
StartCoroutine(WaitForRequest(www));
//problem is here !
return success_fail;
}
private IEnumerator WaitForRequest(WWW www)
{
yield return www;
if (www.error == null)
{
if(www.text.Contains("user exists"))
{
success_fail = 2;
}
else
{
success_fail=1;
}
} else {
success_fail=0;
}
}
La coroutine aggiorna il valore di 'success_fail' con il valore pertinente. Ma "return success_fail;" la riga nel metodo POST viene eseguita prima della fine della coroutine, il che fa sì che restituisca un valore falso.
Ho provato a utilizzare una coroutine aggiuntiva ma, senza successo, suppongo di avere anche un errore. Come posso restituire il valore 'success_fail' solo al termine della coroutine?
Grazie.
Se chiami un'altra coroutine, aspetterà fino a che la coroutine è finita. http://answers.unity3d.com/questions/276055/question-about-coroutines-and-waiting-for-a-functi.html – Shelby115
Stai mescolando codice sincrono e asincrono. Forse sarebbe utile una funzione di callback? Si potrebbe usare un 'delegato azione, dove' T' è il tipo che si desidera "restituire". –
rutter