Ich arbeite an einem Spiel in Einheit und stoße auf ein Problem, das ich nicht lösen kann. Ich verbinde mich über ein Standard-WWW-Objekt mit einem Webserver und verwende eine Coroutine, um eine POST-Anfrage auszuführen.Unity - Rückgabewert erst nach Abschluss der Koroutine
Der Code an sich funktioniert, aber ich muss einen Variablenwert aktualisieren und diese Variable zurückgeben, sobald die Coroutine beendet ist, was ich nicht tun kann.
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;
}
}
Die Coroutine aktualisiert den Wert von 'success_fail' mit dem entsprechenden Wert. Aber die 'Rückkehr success_fail;' Die Zeile in der POST-Methode wird ausgeführt, bevor die Coroutine beendet wird. Dadurch wird ein falscher Wert zurückgegeben.
Ich habe versucht, eine zusätzliche Coroutine aber erfolglos zu verwenden, angenommen, dass ich dort auch einen Fehler hatte. Wie kann ich den Wert 'success_fail' erst nach Abschluss der Coroutine zurückgeben?
Danke.
Wenn Sie eine andere Coroutine aufrufen, wird gewartet, bis diese Coroutine beendet ist. http://answers.unity3d.com/questions/276055/question-about-coroutines-and-waiting-for-a-functi.html – Shelby115
Sie vermischen synchronen und asynchronen Code. Vielleicht wäre eine Callback-Funktion sinnvoll? Sie könnten einen 'Action' Delegaten verwenden, wobei' T' der Typ ist, den Sie "zurückgeben" möchten. –
rutter