AtD Geschrieben 4. August 2020 Melden Share Geschrieben 4. August 2020 Hallo. Ich bin neu hier und auch ealtiv neu zu Unity, C# und coiding allgemein. Daher probiere und recherchiere ich ewig, nur zu diesem Problem habe ich bis jetzt keine Lösung gefunden. Zunächst mein Ziel: Von Unity(C#) aus, steuere PHP-File an, um von der MySQL-Datenbank die Informationen zu erhalten. Nach dem ich die Infos mit Unity vom PHP-File erhalte, will ich die Infos direkt in einer anderen Funktion umsetzen. Also so würde es ungefähr aussehen: main (){ // activated from a button resievedString = get_Cell_from_PHPFile(); this_is_functions_with_that_string(resievedString ) } Und das habe ich erfolglos ausprobiert: zunächst mit Coroutine, mit dem Ergebniss, dass this_is_functions_with_that_string( ) zuerst mit leeren Argument gerufen wird: get_Cell_from_PHPFile(){ StartCoroutine(Call_PHPPhile()); } IEnumerator Call_PHPPhile(){ ..some code for the form to send to PHP_File.. www.SendWebRequest(); yield return www.downloadHandler.text; } Dann habe ich versucht auf yield und IEnumerator zu verzichten, mit dem Resultat, dass ich von PHP-file gar nichts zurück bekomme. Es wird eine Fehler ausgegeben, dass ich die Funktion aus Start() rufen soll. Doch auch das funktioniert nicht. : get_Cell_from_PHPFile(){ ..some code.. www.SendWebRequest(); return www.downloadHandler.text; } Dann habe ich von Async und Wait gehört: public string ZwischenSpeicher; public void Test_FunctionFortheBtn() { Calling_Head_SsyncFunctions(); } private async void Calling_Head_SsyncFunctions() { var result = await Async_Function_should_GO_first(); MethodAfter_StartCoRoutine(ZwischenSpeicher); } private async Task<bool> await Async_Function_should_GO_first() { bool result = false; await Task.Run(() => { StartCoroutine(Call_PHP_File()); result = true; }); return result; } IEnumerator Call_PHP_File() { ...some code for the form to send to PHP_File.. yield return www.SendWebRequest(); ZwischenSpeicher = www.downloadHandler.text; } Ich wäre wirklich dankbar, wenn mir jemand mit einem Ratschlag helfen könnte. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 5. August 2020 Melden Share Geschrieben 5. August 2020 Von async und wait würde ich ganz stark abraten aktuell. Das ist noch nicht annähernd in Unity brauchbar, zumindest nicht ohne eine zusätzliche Bilbiothek. Wie du UnityWebRequest benutzen kannst, steht hier: https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequest.Get.html using (UnityWebRequest webRequest = UnityWebRequest.Get(uri)) { yield return webRequest.SendWebRequest(); if (webRequest.isNetworkError) { DoErrorStuffWith(webRequest.error); } else { DoStuffWith(webRequest.downloadHandler.text); } } Denke daran, dass Coroutinen zwar technisch gesehen nicht asynchron sind, aber durch ihre Unterbrechungen über mehrere Frames hinweg laufen können. Im Gegensatz zu async/await können sie keine Werte zurückgeben. Wenn du mit dem Ergebnis des Requests etwas machen willst, musst du das je nach Situation in die Coroutine einbauen oder über ein Callback regeln. Ersteres ist auf jeden Fall die einfachere Variante, nur halt nicht immer die bessere. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.